首页 > 代码库 > ASP.NET MVC中简单使用Autofac
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”结尾的类,并自动找出这些类所实现的接口,然后设定与其对应。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。