在asp.net mvc控制器中使用Autofac來解析依賴
如下Controller中使用建構函式依賴注入介面IPeople
:
public class AutoFacController : Controller { public IPeople _people; public AutoFacController(IPeople people) { _people = people; } // GET: AutoFac public ActionResult Index() { ViewBag.test = _people.Getpeople(); return View(); } }
如何使用AutoFac如下:
1、在App_Start建立類檔案AutofacConfig.cs
引用
using Autofac; using Autofac.Integration.Mvc;
以下為逐個註冊方法:
//建立autofac管理註冊類的容器例項 var builder = new ContainerBuilder(); //下面就需要為這個容器註冊它可以管理的型別 //builder的Register方法可以通過多種方式註冊型別,之前在控制檯程式裡面也演示了好幾種方式了。 builder.RegisterType<People>().As<IPeople>(); //builder.RegisterType<DefaultController>().InstancePerDependency(); //使用Autofac提供的RegisterControllers擴充套件方法來對程式集中所有的Controller一次性的完成註冊 builder.RegisterControllers(Assembly.GetExecutingAssembly()); //生成具體的例項 var container = builder.Build(); //下面就是使用MVC的擴充套件 更改了MVC中的注入方式. DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
以下為批量註冊方法:
public class AutofacConfig { /// <summary> /// 負責呼叫autofac框架實現業務邏輯層和資料倉儲層程式集中的型別物件的建立 /// 負責建立MVC控制器類的物件(呼叫控制器中的有參建構函式),接管DefaultControllerFactory的工作 /// </summary> public static void Register() { //例項化一個autofac的建立容器 var builder = new ContainerBuilder(); //告訴Autofac框架,將來要建立的控制器類存放在哪個程式集 (Wchl.CRM.WebUI) Assembly controllerAss = Assembly.Load("Wchl.WMBlog.WebUI"); builder.RegisterControllers(controllerAss); //告訴autofac框架註冊資料倉儲層所在程式集中的所有類的物件例項 Assembly respAss = Assembly.Load("Wchl.WMBlog.Repository"); //建立respAss中的所有類的instance以此類的實現介面儲存 builder.RegisterTypes(respAss.GetTypes()).AsImplementedInterfaces(); //告訴autofac框架註冊業務邏輯層所在程式集中的所有類的物件例項 Assembly serpAss = Assembly.Load("Wchl.WMBlog.Services"); //建立serAss中的所有類的instance以此類的實現介面儲存 builder.RegisterTypes(serpAss.GetTypes()).AsImplementedInterfaces(); // builder.RegisterType<>().As<>(); //建立一個Autofac的容器 var container = builder.Build(); //將MVC的控制器物件例項 交由autofac來建立 DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); } }
2、在全域性Global.asax類Application_Start()方法中呼叫AutofacConfig配置類方法
protected void Application_Start(object sender, EventArgs e) { AutofacConfig.Register(); }
3、Web Api配置Autofac方法
引用
using Autofac.Integration.WebApi;
參考資料:http://docs.autofac.org/en/latest/integration/webapi.html
var builder = new ContainerBuilder(); // Get your HttpConfiguration. var config = GlobalConfiguration.Configuration; // Register your Web API controllers. builder.RegisterApiControllers(Assembly.GetExecutingAssembly()); // OPTIONAL: Register the Autofac filter provider. builder.RegisterWebApiFilterProvider(config); // Set the dependency resolver to be Autofac. var container = builder.Build(); config.DependencyResolver = new AutofacWebApiDependencyResolver(container);