一、前言
在編程中,依賴注入是一種實現控制反轉且用於解決依賴性問題的設計模式。一個依賴關系指的是可被利用的一種對象 。依賴注入是將所依賴的傳遞給將要使用的從屬對象。該服務將會變成客戶端狀態的一部分並傳遞服務給客戶端,而不允許客戶端來建立或尋找服務。依賴注入使我們的編程代碼變得松散耦合,易於管理。
Autofac是.NET領域最為流行的IOC框架之一,傳說是速度最快的一個:
優點:
- 它是C#語言聯系很緊密,也就是說C#里的很多編程方式都可以為Autofac使用,例如可以用Lambda表達式注冊組件
- 較低的學習曲線,學習它非常的簡單,只要你理解了IoC和DI的概念以及在何時需要使用它們
- XML配置支持
- 自動裝配
- 與Asp.Net MVC 3集成
- 微軟的Orchad開源程序使用的就是Autofac,從該源碼可以看出它的方便和強大
- 簡潔高效
二、安裝配置Autofac
1.nuget安裝Autofac和Autofac.WebApi2,注意版本要求
2.新建AutoFac文件夾(F大寫),新建組件注冊類ContainerBuilerCommon來注冊組件
/// <summary> /// Autofac注冊類 /// </summary> public static class ContainerBuilerCommon { /// <summary> /// 注冊方法 /// </summary> /// <returns></returns> public static IContainer GetWebApiContainer() { var builder = new ContainerBuilder(); // 注冊webapi的所有控制器 builder.RegisterApiControllers(Assembly.GetExecutingAssembly()); // 注冊一個用於測試的組件Pserson。 builder.RegisterType<Person>(); return builder.Build(); } }
3.Global.asax文件加入以下代碼配置autofac依賴注入
public class WebApiApplication : System.Web.HttpApplication { protected void Application_Start() { // 獲取webapi的配置 var config = GlobalConfiguration.Configuration; // 獲取webapi的依賴注入容器 var container = ContainerBuilerCommon.GetWebApiContainer(); // 配置webapi的依賴注入 config.DependencyResolver = new AutofacWebApiDependencyResolver(container); GlobalConfiguration.Configure(WebApiConfig.Register); } }
三、使用autofac實現依賴注入
1.之前我們在autofac注冊類里面注冊了Person類,下面我們在person類里面寫一個Say方法
public class Person { public int Id { get; set; } public string Name { get; set; } public string Sex { get; set; } public int Age { get; set; } public string Say() { return "I'm Person Class"; } }
2.在Index控制器中添加Person類的變量,並在構造函數中賦值:
protected Person _person; public IndexController(Person person) { _person = person; }
3.新建一個get請求用來測試依賴注入,如果不適用依賴注入,我們想調用Person的say方法一般是Person p=new Person();p.Say(),有了依賴注入,我們只需要下面這樣。
/// <summary> /// 測試Autofac /// </summary> /// <returns></returns> [Route("autofac")] [HttpGet] public IHttpActionResult Autofac() { return Ok(_person.Say()); }
4.運行項目,測試接口,輸出"I'm Person Class"。可以看到,我們並沒有New一個Person類,就實現了調用Person的Say方法,其實是容器幫我們new了。
四、總結
上面的例子已經簡單的實現了autofac的依賴注入,autofac的用法可總結為三步:
var builder = new ContainerBuilder();
autofac怎么注冊組件可以參考官網:https://autofaccn.readthedocs.io/zh/latest/
3、生成依賴注入容器(如果是webapi則將容器傳給webapi的DependencyResolver對象:
config.DependencyResolver = new AutofacWebApiDependencyResolver(container);