如果對NetCore中的依賴注入不瞭解決,建議先看看深入理解 ASP.NET Core 依賴注入
EntityModel對於原生依賴注入的封裝類:Agebull.Common.Ioc.IocHelper
一 IocHelper類
- ServiceCollection屬性
暴露了NetCore原生的IServiceCollection對象,象原生一樣調用它 - AddTransient、AddScoped、AddSingleton
與原生的方法作用相同
您需要特別清楚NetCore依賴注入的三種生命同期:單例、範圍、實例。
- Create 方法
簡化依賴對象的構造。
二 如何使用
我想與其它框架的IServiceCollection對象保持一致
IocHelper.SetServiceCollection(services);
services爲其它框架的依賴對象服務,如在Startup.cs中如下使用
public void ConfigureServices(IServiceCollection services)
{
IocHelper.SetServiceCollection(services);
}
我希望有一個全局唯一對象而不去管理對象如何構造與銷燬
- 註冊依賴
IocHelper.AddSingleton<AppManageDb, AppManageDb>();
注意,這兩個泛型參數是一樣的
- 使用時調用依賴構造
var db = IocHelper.Create<AppManageDb>();
認真觀察你會發現,每次構造出的對象是同一個.
- 如果需求是範圍唯一(如一次API調用過程),註冊方法改爲AddScoped即可。
我構造了一個基類,已有基礎實現,但我希望將來派生類重載時可以輕鬆切換到派生類的實例
- 基類註冊
IocHelper.AddSingleton<BaseObject, BaseObject>();
- 當派生類實現時
IocHelper.AddSingleton<BaseObject, SupperObject>();
後註冊的會覆蓋之前的註冊。
我想控制構造的行爲
IocHelper.AddSingleton<BaseObject, SupperObject>(() => mycode);
mycode寫成你的構造行爲即可