ASP.NET核心内置DI系统中的DI模块
我一直在使用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的详细信息。
你误解了[this](https://stackoverflow.com/questions/32788637/continued-ninject-support-in-asp-net-mvc-6/32797105#32797105)的答案。答案清楚地表明Ninject *可以被使用。 – Steven