基于NHibernate的UnitOfWork+Repository模式(AutoFac)–Part2
非常感谢各位在之前comment中提出的意见。。确实Razor语法介绍的文章错别字太多,影响大家阅读。
前面的文章介绍了如何在asp.net中中UnitOfWork模式以及Repository模式的使用。只是没有使用IoC工具。今天结合前面的例子在Asp.net mvc中把Autofac集成进来。
之前试着搜索了很多资料来调查是否Autofac比Windsor要好用,或者是比其它的IoC工具是否更好用。
Autofac的优势:
各个IoC工具Resolve的性能对比:
当然这个对比结果是1年前的,现在各个IoC工具都了很大的改进。
Autofac确实是速度最快的IoC工具,但是如果你的系统中需要使用IoC的地方比较少,还是建议使用Windsor,也就是说你的系统比较小的话。
首先需要下载autofac的dll包,我这里使用的是autofac 2.2.4.9版本的。对应的使用Asp.net mvc 2,如果你是用的是asp.net mvc3你需要去autofac官网下载最新版本的dll包,因为Asp.net mvc 3中已经有了DI功能,所以使用方法会和mvc 2中使用的不同。
要想在项目中使用Autofac,可以使用它的Module模式来把各个需要注册的组件分别来放到http module中。
在这个例子中,可以把Repository模式中的Repository组件来使用Autofac的module模式来注册。
使用IoC工具主要是让开发人员不用太多的去关注类的实例化工作,而是把焦点转移到整个框架的设计,如果你对IoC没有概念,你只需要记住我这句话就行了。
先不考虑autofac在Global.asax中和web.config中的配置,先对比下未使用IoC时我们需要做的工作和使用了IoC时的工作量对比:
使用IoC工具:
工作省了不少。
Autofac在Global.asax中的配置:
首先是MvcApplication类必须继承IContainerProviderAccessor接口。
然后是Application_Start方法中注册Module, Controller以及Autofac的module:
上面的代码中,首先需要实例化一个autofac的ContainerBuilder, 第二,三四行代码是让我们的UnitOfWork开始工作。
接下来是注册Model和Controller,
buider.RegisterModule(new NHibernateModule())就是把其它地方IoC组件来这里一起注册。
注意最后一句是使用了Autofac的ControllerFactory,为什么要使用它的ControllerFactory呢?
因为Asp.net Mvc本身提供的ControllerFactory不支持Controller的构造函数有参数,而使用IoC工具需要这样的构造函数。
因为在autofac中的module都是http Module,所以我们需要在Web,Config中添加一个节点:
因为Asp.net mvc 3中提供的对应的Resolve方法。所以如果你使用asp.net mvc3和autofac集成,不再需要修改配置文件。
基于NHibernate的UnitOfWork+Repository模式(AutoFac)–Part2相关推荐
- 分享基于Entity Framework的Repository模式设计(附源码)
关于Repository模式,在这篇文章中有介绍,Entity Framework返回IEnumerable还是IQueryable? 这篇文章介绍的是使用Entity Framework实现的Rep ...
- 分享基于EF6、Unitwork、Autofac的Repository模式设计
目录 分享基于EF6.Unitwork.Autofac的Repository模式设计 一.实现的思路和结构图 二.Repository设计具体的实现代码 三.Repository设计的具体的使用 四. ...
- 基于 EntityFramework 生成 Repository 模式代码
借助 WeihanLi.EntityFramework 实现简单的 Repository Intro 很多时候一些简单的业务都是简单的增删改查,动态生成一些代码完成基本的增删改查,而这些增删改查代码大 ...
- Repository模式与UnitOfWorks模式的运用
软件开发就像是一个江湖,而设计模式就是一本高深的秘籍每读一次.用一次.想一次都能得到新的领悟,让我们的设计技能有所提高.开始时我们可能会"为了模式而模式",让代码变得乱78糟甚至难 ...
- 基于NHibernate的三层结构应用程序开发初步
本文并不是去详细的介绍如何使用NHibernate,而是通过一个简单的例子来演示基于NHibernate的三层结构应用程序开发过程.关于NHibernate的有关文档,DDL已经做了汉化,但是由于英文 ...
- 设计一套基于NHibernate二级缓存的MongoDB组件(上)
摘要:NHibernate Contrib 支持很多第三方的二级缓存,如SysCache,MemCache,Prevalence等等,但是没有MongoDB的,于是自己扩展了一个支持MongoDB的缓 ...
- 模糊综合评价法用什么软件实现_基于建管养一体化模式的钢桥面铺装方案综合评价分析...
文章来源:微信公众号"沥表路面" 钢桥面铺装技术复杂,原材料技术指标要求高,施工控制要求严,交通荷载大.环境温度高.钢桥面支撑体受力复杂.同时,由于受桥梁恒载限制,铺装层厚度有限. ...
- sar偏移量追踪技术_论文推荐 | 吴文豪:基于几何配准的多模式SAR影像配准及其误差分析...
<测绘学报> 构建与学术的桥梁 拉近与权威的距离 基于几何配准的多模式SAR影像配准及其误差分析 吴文豪1, 张磊2, 李陶3, 龙四春1, 段梦4, 周志伟5, 祝传广1, 蒋廷臣61. ...
- 基于Servlet+JSP+JavaBean开发模式的用户登录注册
基于Servlet+JSP+JavaBean开发模式的用户登录注册 一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复 ...
最新文章
- Spring-Data-MongoDB的Index注解的expireAfterSeconds参数不起作用?解决方案居然是这样的!...
- Python之数据拆分——groupby()方法
- 邮件营销的三个基本要素讲解
- response.sendRedirect()与request.getRequestDispatcher().forward()区别
- Tomcat+MySql+jdbc
- AIX下使用xmanager
- JAVA使用反射的方法,参数是数组怎么办?
- try固定搭配_regret cease try等词的固定搭配用法
- Code Review: Rietveld平台的搭建和Rietveld的使用。
- SQL语句-考勤统计表按照年份统计员工每月的加班调休数据
- python函数之enumerate()快速打印出列表中的元素以及对应的下标
- 新浪微博网页版打开异常解决方案
- 将excel表格数据转换为xml文本数据
- “电池圣杯”:纯锂电池让手机使用时间长4倍
- jdk7 window 64位安装包 微云网盘下载
- 独秀日记:咱朋友圈的微商大佬比怨妇多,总是更好一点的,对吧
- 工信部要求,百度网盘不能限速了!
- Unity2D中实现子弹的弧线轨迹
- Win8传感器—加速度计、陀螺仪、指南针
- Android 系统简介