2016-11-07 75 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的详细信息。