非常感谢各位在之前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相关推荐

  1. 分享基于Entity Framework的Repository模式设计(附源码)

    关于Repository模式,在这篇文章中有介绍,Entity Framework返回IEnumerable还是IQueryable? 这篇文章介绍的是使用Entity Framework实现的Rep ...

  2. 分享基于EF6、Unitwork、Autofac的Repository模式设计

    目录 分享基于EF6.Unitwork.Autofac的Repository模式设计 一.实现的思路和结构图 二.Repository设计具体的实现代码 三.Repository设计的具体的使用 四. ...

  3. 基于 EntityFramework 生成 Repository 模式代码

    借助 WeihanLi.EntityFramework 实现简单的 Repository Intro 很多时候一些简单的业务都是简单的增删改查,动态生成一些代码完成基本的增删改查,而这些增删改查代码大 ...

  4. Repository模式与UnitOfWorks模式的运用

    软件开发就像是一个江湖,而设计模式就是一本高深的秘籍每读一次.用一次.想一次都能得到新的领悟,让我们的设计技能有所提高.开始时我们可能会"为了模式而模式",让代码变得乱78糟甚至难 ...

  5. 基于NHibernate的三层结构应用程序开发初步

    本文并不是去详细的介绍如何使用NHibernate,而是通过一个简单的例子来演示基于NHibernate的三层结构应用程序开发过程.关于NHibernate的有关文档,DDL已经做了汉化,但是由于英文 ...

  6. 设计一套基于NHibernate二级缓存的MongoDB组件(上)

    摘要:NHibernate Contrib 支持很多第三方的二级缓存,如SysCache,MemCache,Prevalence等等,但是没有MongoDB的,于是自己扩展了一个支持MongoDB的缓 ...

  7. 模糊综合评价法用什么软件实现_基于建管养一体化模式的钢桥面铺装方案综合评价分析...

    文章来源:微信公众号"沥表路面" 钢桥面铺装技术复杂,原材料技术指标要求高,施工控制要求严,交通荷载大.环境温度高.钢桥面支撑体受力复杂.同时,由于受桥梁恒载限制,铺装层厚度有限. ...

  8. sar偏移量追踪技术_论文推荐 | 吴文豪:基于几何配准的多模式SAR影像配准及其误差分析...

    <测绘学报> 构建与学术的桥梁 拉近与权威的距离 基于几何配准的多模式SAR影像配准及其误差分析 吴文豪1, 张磊2, 李陶3, 龙四春1, 段梦4, 周志伟5, 祝传广1, 蒋廷臣61. ...

  9. 基于Servlet+JSP+JavaBean开发模式的用户登录注册

    基于Servlet+JSP+JavaBean开发模式的用户登录注册 一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复 ...

最新文章

  1. Spring-Data-MongoDB的Index注解的expireAfterSeconds参数不起作用?解决方案居然是这样的!...
  2. Python之数据拆分——groupby()方法
  3. 邮件营销的三个基本要素讲解
  4. response.sendRedirect()与request.getRequestDispatcher().forward()区别
  5. Tomcat+MySql+jdbc
  6. AIX下使用xmanager
  7. JAVA使用反射的方法,参数是数组怎么办?
  8. try固定搭配_regret cease try等词的固定搭配用法
  9. Code Review: Rietveld平台的搭建和Rietveld的使用。
  10. SQL语句-考勤统计表按照年份统计员工每月的加班调休数据
  11. python函数之enumerate()快速打印出列表中的元素以及对应的下标
  12. 新浪微博网页版打开异常解决方案
  13. 将excel表格数据转换为xml文本数据
  14. “电池圣杯”:纯锂电池让手机使用时间长4倍
  15. jdk7 window 64位安装包 微云网盘下载
  16. 独秀日记:咱朋友圈的微商大佬比怨妇多,总是更好一点的,对吧
  17. 工信部要求,百度网盘不能限速了!
  18. Unity2D中实现子弹的弧线轨迹
  19. Win8传感器—加速度计、陀螺仪、指南针
  20. Android 系统简介

热门文章

  1. jvm性能调优实战 - 49OOM异常进行监控以及online处理
  2. jvm性能调优 - 12Stop The Word 问题分析
  3. AS插件-Android Drawable Importer
  4. Dubbo和SpringCloud的区别
  5. List有关知识与ArrayList的实现
  6. linux内核的中断上下文,Linux操作系统中中断上下文中的互斥
  7. Arrays常见用法
  8. ROS知识:ros和硬件的连接点---ROS-Control
  9. android 动态录音权限,Android如何判断手机是否有录音权限的工具类
  10. 数组去重(包括es6)