在開始之前,讓我們先來了解一下什么是依賴注入?
在編程中,依賴注入是一種實現控制反轉且用於解決依賴性問題的設計模式。一個依賴關系指的是可被利用的一種對象 。依賴注入是將所依賴的傳遞給將要使用的從屬對象。該服務將會變成客戶端狀態的一部分並傳遞服務給客戶端,而不允許客戶端來建立或尋找服務。依賴注入使我們的編程代碼變得松散耦合,易於管理。
依賴注入的類型:
構造函數注入:在構造函數注入中,注入器通過客戶端類構造函數提供服務(依賴性)。
屬性注入:在屬性注入(又名Setter注入)中,注入器通過客戶端類的公共屬性提供依賴性。
方法注入:在這種類型的注入中,客戶端類實現一個接口,該接口聲明方法以提供依賴性,並且注入器使用此接口來提供對客戶端類的依賴性。
依賴注入的好處:
- 減少依賴性
- 依賴注入可以消除或者減少組件間不必要的依賴性。以降低組件改變時所帶來的影響組件
- 增強可重用性
- 減少組件依賴性可以增強組件的可重用性。如果在不同的上下文中需要某個接口的不同實現,或者只是同一實現的不同配置,則可以將該組件配置為使用該實現。無需更改代碼。
- 增加代碼的可測試性
- 依賴注入也增加了組件的可測試性。當依賴項可以注入組件時,意味着可以注入這些依賴項的模擬實現。模擬對象用於測試作為實際實現的替代,並且可以配置模擬對象的行為
- 增強代碼的可讀性
- 依賴注入可將依賴項移動到組件的接口。使得更容易看到組件中哪些具有依賴關系,從而使代碼更具可讀性。
- 減少依賴性承載
- 依賴性承載會在代碼中產生大量“噪音”,使其難以閱讀和維護,並且使得組件更難測試。而依賴注入可以減少依賴性承載和靜態單例的使用,可以將組件完美的連接在一起
1.首選需要在Nuget中安裝Autofac、Autofac.WebApi2
2.在Global.asax的Application_Start方法中加入如下代碼:
//*依賴注入*/ var builder = new ContainerBuilder(); builder.RegisterApiControllers(Assembly.GetExecutingAssembly()); //注入項目名稱(將BusinessRepository、MysqlDBRepository項目中的所有對象注入) //var BusinessRepository = Assembly.Load("BusinessRepository"); //var MysqlDBRepository = Assembly.Load("MysqlDBRepository"); //builder.RegisterAssemblyTypes(BusinessRepository).AsImplementedInterfaces(); //builder.RegisterAssemblyTypes(MysqlDBRepository).AsImplementedInterfaces(); //單個對象注入(在項目中需要用到注入的對象都必須進行注入) builder.RegisterType<ProductBusinessRepository>().As<IProductBusinessRepository>(); builder.RegisterType<ProductRepository>().As<IProductRepository>(); var container = builder.Build(); var resolver = new AutofacWebApiDependencyResolver(container); GlobalConfiguration.Configuration.DependencyResolver = resolver;
3.在控制器中使用依賴注入
4.獲取接口數據
5.Demo地址:https://pan.baidu.com/s/1XYOLmOQDnTMEW68oM2Q7XQ
提取碼:6ski