ASP.NET MVC中简单使用Autofac
项目中引入Autofac的目的是为了实现控制反转,即IoC,Inversion of Control。控制反转可以有效的降低类之间的相互依赖关系,增加架构的弹性,降低软件复杂度。
示例代码:
IProvinceRepository.cs
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace Libing.Portal.Web.Models
- {
- public interface IProvinceRepository
- {
- List<Libing.Portal.Web.Models.Province> GetProvinceList();
- }
- }
ProvinceRepository.cs
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- namespace Libing.Portal.Web.Models
- {
- public class ProvinceRepository : IProvinceRepository
- {
- public List<Libing.Portal.Web.Models.Province> GetProvinceList()
- {
- using (var ctx = new PortalContext())
- {
- return ctx.Provinces.ToList();
- }
- }
- }
- }
ProvinceController.cs
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- using System.Web.Mvc;
- namespace Libing.Portal.Web.Controllers
- {
- public class ProvinceController : Controller
- {
- private Libing.Portal.Web.Models.IProvinceRepository _provinceRepository;
- public ProvinceController(Libing.Portal.Web.Models.IProvinceRepository provinceRepository)
- {
- _provinceRepository = provinceRepository;
- }
- public ActionResult Index()
- {
- return View(_provinceRepository.GetProvinceList());
- }
- }
- }
ICityRepository.cs
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace Libing.Portal.Web.Models
- {
- public interface ICityRepository
- {
- List<Libing.Portal.Web.Models.City> GetCityList();
- }
- }
CityRepository.cs
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- namespace Libing.Portal.Web.Models
- {
- public class CityRepository : ICityRepository
- {
- public List<Libing.Portal.Web.Models.City> GetCityList()
- {
- using (var ctx = new PortalContext())
- {
- return ctx.Cities.ToList();
- }
- }
- }
- }
CityController.cs
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- using System.Web.Mvc;
- namespace Libing.Portal.Web.Controllers
- {
- public class CityController : Controller
- {
- private Libing.Portal.Web.Models.IProvinceRepository _provinceRepository;
- private Libing.Portal.Web.Models.ICityRepository _cityRepository;
- public CityController(Libing.Portal.Web.Models.IProvinceRepository provinceRepository, Libing.Portal.Web.Models.ICityRepository cityRepository)
- {
- _provinceRepository = provinceRepository;
- _cityRepository = cityRepository;
- }
- public ActionResult Index()
- {
- return View(_cityRepository.GetCityList());
- }
- }
- }
Global.cs
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- using System.Web.Http;
- using System.Web.Mvc;
- using System.Web.Routing;
- using System.Reflection;
- using Autofac;
- using Autofac.Integration.Mvc;
- namespace Libing.Portal.Web
- {
- // Note: For instructions on enabling IIS6 or IIS7 classic mode,
- // visit http://go.microsoft.com/?LinkId=9394801
- public class MvcApplication : System.Web.HttpApplication
- {
- protected void Application_Start()
- {
- AreaRegistration.RegisterAllAreas();
- #region Autofac注入依赖
- var builder = new ContainerBuilder();
- SetupResolveRules(builder);
- builder.RegisterControllers(Assembly.GetExecutingAssembly());
- var container = builder.Build();
- DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
- #endregion
- WebApiConfig.Register(GlobalConfiguration.Configuration);
- FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
- RouteConfig.RegisterRoutes(RouteTable.Routes);
- }
- private static void SetupResolveRules(ContainerBuilder builder)
- {
- builder.RegisterType<Libing.Portal.Web.Models.ProvinceRepository>().As<Libing.Portal.Web.Models.IProvinceRepository>();
- builder.RegisterType<Libing.Portal.Web.Models.CityRepository>().As<Libing.Portal.Web.Models.ICityRepository>();
- }
- }
- }
在Global.cs中的SetupResolveRules可以使用下面的方式来注册:
- private static void SetupResolveRules(ContainerBuilder builder)
- {
- builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly())
- .Where(t => t.Name.EndsWith("Repository"))
- .AsImplementedInterfaces();
- }
利用ContainerBuilder的RegisterAssemblyTypes()方法来注册组件中的所有类,通过Where()筛选出全部以“Repository”结尾的类,并自动找出这些类所实现的接口,然后设定与其对应。
ASP.NET MVC中简单使用Autofac的更多相关文章
- 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, ...
- asp.net mvc 中 一种简单的 URL 重写
asp.net mvc 中 一种简单的 URL 重写 Intro 在项目中想增加一个公告的功能,但是又不想直接用默认带的那种路由,感觉好low逼,想弄成那种伪静态化的路由 (别问我为什么不直接静态化, ...
- 关于 ASP.NET MVC 中的视图生成
在 ASP.NET MVC 中,我们将前端的呈现划分为三个独立的部分来实现,Controller 用来控制用户的操作,View 用来控制呈现的内容,Model 用来表示处理的数据. 从控制器到视图 通 ...
- 在Asp.Net MVC 中配置 Serilog
Serilog 是一种非常简便记录log 的处理方式,使用Serilog可以生成本地的text文件, 也可以通过 Seq 来在Web界面中查看具体的log内容. 接下来就简单的介绍一下在Asp.Net ...
- 如何在 ASP.NET MVC 中集成 AngularJS(3)
今天来为大家介绍如何在 ASP.NET MVC 中集成 AngularJS 的最后一部分内容. 调试路由表 - HTML 缓存清除 就在我以为示例应用程序完成之后,我意识到,我必须提供两个版本的路由表 ...
- 如何在 ASP.NET MVC 中集成 AngularJS(2)
在如何在 ASP.NET MVC 中集成 AngularJS(1)中,我们介绍了 ASP.NET MVC 捆绑和压缩.应用程序版本自动刷新和工程构建等内容. 下面介绍如何在 ASP.NET MVC 中 ...
- 《Entity Framework 6 Recipes》中文翻译系列 (20) -----第四章 ASP.NET MVC中使用实体框架之在MVC中构建一个CRUD示例
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 第四章 ASP.NET MVC中使用实体框架 ASP.NET是一个免费的Web框架 ...
- 在 ASP.NET MVC 中充分利用 WebGrid (microsoft 官方示例)
在 ASP.NET MVC 中充分利用 WebGrid https://msdn.microsoft.com/zh-cn/magazine/hh288075.aspx Stuart Leeks 下载代 ...
- ASP.NET MVC中的两个Action之间值的传递--TempData
一. ASP.NET MVC中的TempData 在ASP.NET MVC框架的ControllerBase中存在一个叫做TempData的Property,它的类型为TempDataDictiona ...
随机推荐
- jQqery EasyUI dategrid行中多列数据的可编辑操作
最近的项目中需要在前台dategrid列表中直接修改某些列的数据,并且修改后的数据需要不通过后台而自动更新在列表中. 带着这一问题开始寻找实现的思路,首先想到的就是去jQqery EasyUI官网找例 ...
- 一个字体引发的bug
delphi 7 中默认字体样式为‘MS Sans Serif’,一般情况下子级控件会继承父级一些属性,其中包括字体(包括字体大小,字体样式,颜色等)属性.如果动态创建控件且需要修改字体颜色或者大小时 ...
- Android中的TabHost
TabHost是整个Tab的容器,包含TabWidget和FrameLayout两个部分,TabWidget是每个Tab的表情,FrameLayout是Tab内容. 实现方法:继承TabActivit ...
- faceBook Pop动画库手动添加版本
本人将pop的框架直接拖进工程里面然后按照教程导入头文件#import "POP.h"发现报找不到文件的错误,于是我手动将pop库里面所有类似于#import <POP/XX ...
- 编译PHP5缺t1lib包安装
t1lib_doc.dvi Error解决: 1. 下载t1lib-5.1.2.tar.gz2. 解决依赖关系:sudo apt-get build-dep t1lib 3. 安装:./configu ...
- Linux环境下查看历史操作命令及清除方法
在Linux环境中可以通过方向键的上下按键查看近期键入的命令.但这种方法只能一个一个的查看,其实系统提供了查看所有历史命令的方法. 在终端中输入以下命令查看所有命令: history [root@te ...
- Windows服务器安全加固实战(Windows Server 2008 R2和Windows Server 2012)
最近我们立方技术工作室在使用阿里云的过程中,发现服务器安全性也不是很高,而服务端的安全软件都很贵.为了为朋友们提供更加有效的解决方案,我们决定身体力行,高筑墙,大幅度提升服务器的安全防护级别! 主机安 ...
- Hasor-Core v0.0.4 & Web v0.0.3 发布
“Hasor是一款开源的 Java 应用开发框架.它是围绕 Guice 为核心创建的一系列模块组合而成.使用Hasor 会加快软件软件开发效率并降低开发成本.目前 Hasor包含了 Hasor-Cor ...
- Yii2 中自定义实例名称
Yii2高级模板中,以frontend 和backeend的模式来分离前后台,这样的优势是 工程可以独立开发和部署.很大程度上起到解耦作用. 如果我们希望再增加名为 [api]一个过程怎么办? 第一步 ...
- python Scrapy
由于项目要使用新闻,大量的数据所以想到了python的scrapy 下面大致讲一讲如何安装使用,直到整个新闻采集模块完成,网址什么的自己找 这里只是示范这里的项目环境是python 2.66 cent ...