我一直在使用NInject一段時間,現在我將在Asp.net核心中開始一個項目。似乎NInject cannot be used with Asp.net Core。所以現在我的問題是Asp.net核心提供的任何di modules just as NInject或其他di容器提供嗎?ASP.NET核心內置DI系統中的DI模塊
回答
Asp.Net Core提供了開箱即用的DI框架,它允許您爲每個Http Request或單例的每個解析請求添加一個對象。 所有這一切都在ConfigureServices
方法 前完成:
public void ConfigureServices(IServiceCollection services)
{
//Your configuration
// Add application services.
services.AddTransient<IEmailSender, AuthMessageSender>();
services.AddTransient<ISmsSender, AuthMessageSender>();
}
你可以閱讀更多關於它在這裏
https://docs.asp.net/en/latest/fundamentals/dependency-injection.html
它沒有真正回答OP的問題,如果有模塊支持,其中模塊在每個類庫中定義,並在那裏註冊,主應用程序只在引導期間加載模塊類 – Tseng
它怎麼沒有回答題?問題是關於對DI的asp.net核心支持,答案是它已經做好了準備,那麼你的POV的答案是什麼?爲什麼我們應該建議像ninject這樣的另一個DI,如果它已經存在OOB? –
不,問題不是關於DI的ASP.NET核心支持,OP知道它在那裏。他特意詢問模塊。與在郵件應用程序中執行註冊相反,模塊是放置在庫中的類,用於執行註冊。你可以在這裏閱讀關於Ninject中的模塊的https://github.com/ninject/Ninject/wiki/Modules-and-the-Kernel。其他IoC也有它(CastleWindsor,Autofac,Unity Container)。但是,由於我在答覆中指出的原因,ASP.NET Core的DI沒有這個功能 – Tseng
ASP.NET核心不提供任何模塊的支持的。它被設計成一個簡單的開箱即用的容器,第三方IoC容器可以插入。
所以沒有自動註冊,程序集掃描,裝飾器,攔截器或模塊。如果你想要它們,你需要使用第三方框架(AutoFac,StructureMap等)。
第三方庫使用註冊方法進行註冊,在ConfigureServices
方法中被稱爲services.AddXxx()
。
public static class MyLibraryServiceCollectionExtensions
{
public static IServiceCollection AddMyLibrary(this IServiceCollection services)
{
services.TryAddScoped<IMyService,MyService>();
return services;
}
}
這是註冊庫(因爲它不依賴於任何IoC容器除了內置IServiceCollection
,這在ASP.NET核心時插入第三方容器使用過),爲東西首選方式就像「業務邏輯庫」一樣,並不存在這樣的事情(之前的模塊很有用)。
只需添加到其他的好答案,您可以使用例如SimpleInjector。這是一個支持.Net Core(以及ASP.Net Core)的輝煌的DI容器。查看如何使用.Net Core here的詳細信息。
- 1. 基於HttpContext的ASP.Net核心DI工廠
- 2. IServiceProvider.GetSingleton在Asp.Net核心解析爲空DI
- 3. 的IoC DI用於.NET核心身份
- 4. EF核心和在Windows服務的DI
- 5. 如何使用ASP.NET MVC核心的DI註冊自定義IObjectModelValidator
- 6. ASP.Net的WebAPI:如何通過統一DI
- 7. 從靜態工廠類訪問ASP.NET核心DI容器
- 8. 注入工廠Func鍵與ASP.NET核心DI
- 9. DI容器和遺留系統
- 10. ModelMap DI上的StructureMap DI
- 11. 如何在TYPO3核心的類中使用DI?
- 12. 使用ASP.NET Core的DI
- 13. DI創建模式
- 14. 在傳統應用系統中應用DI實踐
- 15. JSR330 DI與彈簧DI
- 16. 與Cors的WebApi2衝突的Unity DI DI
- 17. asp.net mvc _ViewStart DI掛鉤
- 18. DI的部分模擬?
- 19. DI容器模塊註冊依賴倒置原理
- 20. 與DI
- 21. ActionAttribute DI
- 22. 將Ninject DI轉換爲Unity DI
- 23. DI,Guice和策略模式
- 24. ZF2 DI配置共享
- 25. 在內核模塊中獲取文件系統掛載點
- 26. 如何在內核模塊中安裝系統調用
- 27. 的Netfilter的內核模塊會導致我的系統崩潰
- 28. Mozilla核心Javascript模塊的位置
- 29. ASP.NET中的可配置內容系統
- 30. AngularJS - 使用ES6導入代替角度DI系統
你誤解了[this](https://stackoverflow.com/questions/32788637/continued-ninject-support-in-asp-net-mvc-6/32797105#32797105)的答案。答案清楚地表明Ninject *可以被使用。 – Steven