项目中引入Autofac的目的是为了实现控制反转,即IoC,Inversion of Control。控制反转可以有效的降低类之间的相互依赖关系,增加架构的弹性,降低软件复杂度。

  示例代码:

  IProvinceRepository.cs

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5.  
  6. namespace Libing.Portal.Web.Models
  7. {
  8. public interface IProvinceRepository
  9. {
  10. List<Libing.Portal.Web.Models.Province> GetProvinceList();
  11. }
  12. }

  ProvinceRepository.cs

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5.  
  6. namespace Libing.Portal.Web.Models
  7. {
  8. public class ProvinceRepository : IProvinceRepository
  9. {
  10. public List<Libing.Portal.Web.Models.Province> GetProvinceList()
  11. {
  12. using (var ctx = new PortalContext())
  13. {
  14. return ctx.Provinces.ToList();
  15. }
  16. }
  17. }
  18. }

  ProvinceController.cs

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.Mvc;
  6.  
  7. namespace Libing.Portal.Web.Controllers
  8. {
  9. public class ProvinceController : Controller
  10. {
  11. private Libing.Portal.Web.Models.IProvinceRepository _provinceRepository;
  12.  
  13. public ProvinceController(Libing.Portal.Web.Models.IProvinceRepository provinceRepository)
  14. {
  15. _provinceRepository = provinceRepository;
  16. }
  17.  
  18. public ActionResult Index()
  19. {
  20. return View(_provinceRepository.GetProvinceList());
  21. }
  22. }
  23. }

  ICityRepository.cs

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5.  
  6. namespace Libing.Portal.Web.Models
  7. {
  8. public interface ICityRepository
  9. {
  10. List<Libing.Portal.Web.Models.City> GetCityList();
  11. }
  12. }

  CityRepository.cs

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5.  
  6. namespace Libing.Portal.Web.Models
  7. {
  8. public class CityRepository : ICityRepository
  9. {
  10. public List<Libing.Portal.Web.Models.City> GetCityList()
  11. {
  12. using (var ctx = new PortalContext())
  13. {
  14. return ctx.Cities.ToList();
  15. }
  16. }
  17. }
  18. }

  CityController.cs

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.Mvc;
  6.  
  7. namespace Libing.Portal.Web.Controllers
  8. {
  9. public class CityController : Controller
  10. {
  11. private Libing.Portal.Web.Models.IProvinceRepository _provinceRepository;
  12. private Libing.Portal.Web.Models.ICityRepository _cityRepository;
  13.  
  14. public CityController(Libing.Portal.Web.Models.IProvinceRepository provinceRepository, Libing.Portal.Web.Models.ICityRepository cityRepository)
  15. {
  16. _provinceRepository = provinceRepository;
  17. _cityRepository = cityRepository;
  18. }
  19.  
  20. public ActionResult Index()
  21. {
  22. return View(_cityRepository.GetCityList());
  23. }
  24. }
  25. }

  Global.cs

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.Http;
  6. using System.Web.Mvc;
  7. using System.Web.Routing;
  8.  
  9. using System.Reflection;
  10.  
  11. using Autofac;
  12. using Autofac.Integration.Mvc;
  13.  
  14. namespace Libing.Portal.Web
  15. {
  16. // Note: For instructions on enabling IIS6 or IIS7 classic mode,
  17. // visit http://go.microsoft.com/?LinkId=9394801
  18. public class MvcApplication : System.Web.HttpApplication
  19. {
  20. protected void Application_Start()
  21. {
  22. AreaRegistration.RegisterAllAreas();
  23.  
  24. #region Autofac注入依赖
  25. var builder = new ContainerBuilder();
  26. SetupResolveRules(builder);
  27. builder.RegisterControllers(Assembly.GetExecutingAssembly());
  28. var container = builder.Build();
  29. DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
  30. #endregion
  31.  
  32. WebApiConfig.Register(GlobalConfiguration.Configuration);
  33. FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
  34. RouteConfig.RegisterRoutes(RouteTable.Routes);
  35. }
  36.  
  37. private static void SetupResolveRules(ContainerBuilder builder)
  38. {
  39. builder.RegisterType<Libing.Portal.Web.Models.ProvinceRepository>().As<Libing.Portal.Web.Models.IProvinceRepository>();
  40. builder.RegisterType<Libing.Portal.Web.Models.CityRepository>().As<Libing.Portal.Web.Models.ICityRepository>();
  41. }
  42. }
  43. }

  在Global.cs中的SetupResolveRules可以使用下面的方式来注册:

  1. private static void SetupResolveRules(ContainerBuilder builder)
  2. {
  3. builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly())
  4. .Where(t => t.Name.EndsWith("Repository"))
  5. .AsImplementedInterfaces();
  6. }

  利用ContainerBuilder的RegisterAssemblyTypes()方法来注册组件中的所有类,通过Where()筛选出全部以“Repository”结尾的类,并自动找出这些类所实现的接口,然后设定与其对应。

ASP.NET MVC中简单使用Autofac的更多相关文章

  1. ADO.NET .net core2.0添加json文件并转化成类注入控制器使用 简单了解 iTextSharp实现HTML to PDF ASP.NET MVC 中 Autofac依赖注入DI 控制反转IOC 了解一下 C# AutoMapper 了解一下

    ADO.NET   一.ADO.NET概要 ADO.NET是.NET框架中的重要组件,主要用于完成C#应用程序访问数据库 二.ADO.NET的组成 ①System.Data  → DataTable, ...

  2. asp.net mvc 中 一种简单的 URL 重写

    asp.net mvc 中 一种简单的 URL 重写 Intro 在项目中想增加一个公告的功能,但是又不想直接用默认带的那种路由,感觉好low逼,想弄成那种伪静态化的路由 (别问我为什么不直接静态化, ...

  3. 关于 ASP.NET MVC 中的视图生成

    在 ASP.NET MVC 中,我们将前端的呈现划分为三个独立的部分来实现,Controller 用来控制用户的操作,View 用来控制呈现的内容,Model 用来表示处理的数据. 从控制器到视图 通 ...

  4. 在Asp.Net MVC 中配置 Serilog

    Serilog 是一种非常简便记录log 的处理方式,使用Serilog可以生成本地的text文件, 也可以通过 Seq 来在Web界面中查看具体的log内容. 接下来就简单的介绍一下在Asp.Net ...

  5. 如何在 ASP.NET MVC 中集成 AngularJS(3)

    今天来为大家介绍如何在 ASP.NET MVC 中集成 AngularJS 的最后一部分内容. 调试路由表 - HTML 缓存清除 就在我以为示例应用程序完成之后,我意识到,我必须提供两个版本的路由表 ...

  6. 如何在 ASP.NET MVC 中集成 AngularJS(2)

    在如何在 ASP.NET MVC 中集成 AngularJS(1)中,我们介绍了 ASP.NET MVC 捆绑和压缩.应用程序版本自动刷新和工程构建等内容. 下面介绍如何在 ASP.NET MVC 中 ...

  7. 《Entity Framework 6 Recipes》中文翻译系列 (20) -----第四章 ASP.NET MVC中使用实体框架之在MVC中构建一个CRUD示例

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 第四章  ASP.NET MVC中使用实体框架 ASP.NET是一个免费的Web框架 ...

  8. 在 ASP.NET MVC 中充分利用 WebGrid (microsoft 官方示例)

    在 ASP.NET MVC 中充分利用 WebGrid https://msdn.microsoft.com/zh-cn/magazine/hh288075.aspx Stuart Leeks 下载代 ...

  9. ASP.NET MVC中的两个Action之间值的传递--TempData

    一. ASP.NET MVC中的TempData 在ASP.NET MVC框架的ControllerBase中存在一个叫做TempData的Property,它的类型为TempDataDictiona ...

随机推荐

  1. jQqery EasyUI dategrid行中多列数据的可编辑操作

    最近的项目中需要在前台dategrid列表中直接修改某些列的数据,并且修改后的数据需要不通过后台而自动更新在列表中. 带着这一问题开始寻找实现的思路,首先想到的就是去jQqery EasyUI官网找例 ...

  2. 一个字体引发的bug

    delphi 7 中默认字体样式为‘MS Sans Serif’,一般情况下子级控件会继承父级一些属性,其中包括字体(包括字体大小,字体样式,颜色等)属性.如果动态创建控件且需要修改字体颜色或者大小时 ...

  3. Android中的TabHost

    TabHost是整个Tab的容器,包含TabWidget和FrameLayout两个部分,TabWidget是每个Tab的表情,FrameLayout是Tab内容. 实现方法:继承TabActivit ...

  4. faceBook Pop动画库手动添加版本

    本人将pop的框架直接拖进工程里面然后按照教程导入头文件#import "POP.h"发现报找不到文件的错误,于是我手动将pop库里面所有类似于#import <POP/XX ...

  5. 编译PHP5缺t1lib包安装

    t1lib_doc.dvi Error解决: 1. 下载t1lib-5.1.2.tar.gz2. 解决依赖关系:sudo apt-get build-dep t1lib 3. 安装:./configu ...

  6. Linux环境下查看历史操作命令及清除方法

    在Linux环境中可以通过方向键的上下按键查看近期键入的命令.但这种方法只能一个一个的查看,其实系统提供了查看所有历史命令的方法. 在终端中输入以下命令查看所有命令: history [root@te ...

  7. Windows服务器安全加固实战(Windows Server 2008 R2和Windows Server 2012)

    最近我们立方技术工作室在使用阿里云的过程中,发现服务器安全性也不是很高,而服务端的安全软件都很贵.为了为朋友们提供更加有效的解决方案,我们决定身体力行,高筑墙,大幅度提升服务器的安全防护级别! 主机安 ...

  8. Hasor-Core v0.0.4 & Web v0.0.3 发布

    “Hasor是一款开源的 Java 应用开发框架.它是围绕 Guice 为核心创建的一系列模块组合而成.使用Hasor 会加快软件软件开发效率并降低开发成本.目前 Hasor包含了 Hasor-Cor ...

  9. Yii2 中自定义实例名称

    Yii2高级模板中,以frontend 和backeend的模式来分离前后台,这样的优势是 工程可以独立开发和部署.很大程度上起到解耦作用. 如果我们希望再增加名为 [api]一个过程怎么办? 第一步 ...

  10. python Scrapy

    由于项目要使用新闻,大量的数据所以想到了python的scrapy 下面大致讲一讲如何安装使用,直到整个新闻采集模块完成,网址什么的自己找 这里只是示范这里的项目环境是python 2.66 cent ...