2016-11-07 71 views
-1

我一直在使用NInject一段時間,現在我將在Asp.net核心中開始一個項目。似乎NInject cannot be used with Asp.net Core。所以現在我的問題是Asp.net核心提供的任何di modules just as NInject或其他di容器提供嗎?ASP.NET核心內置DI系統中的DI模塊

+1

你誤解了[this](https://stackoverflow.com/questions/32788637/continued-ninject-support-in-asp-net-mvc-6/32797105#32797105)的答案。答案清楚地表明Ninject *可以被使用。 – Steven

回答

-2

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

+1

它沒有真正回答OP的問題,如果有模塊支持,其中模塊在每個類庫中定義,並在那裏註冊,主應用程序只在引導期間加載模塊類 – Tseng

+0

它怎麼沒有回答題?問題是關於對DI的asp.net核心支持,答案是它已經做好了準備,那麼你的POV的答案是什麼?爲什麼我們應該建議像ninject這樣的另一個DI,如果它已經存在OOB? –

+1

不,問題不是關於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

0

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核心時插入第三方容器使用過),爲東西首選方式就像「業務邏輯庫」一樣,並不存在這樣的事情(之前的模塊很有用)。

1

只需添加到其他的好答案,您可以使用例如SimpleInjector。這是一個支持.Net Core(以及ASP.Net Core)的輝煌的DI容器。查看如何使用.Net Core here的詳細信息。