我已经使用NInject一段时间了,现在我将在Asp.net核心中启动一个项目。似乎NInject cannot be used with Asp.net Core。所以现在我的问题是Asp.net核心是否提供了任何di modules just as NInject或其他di容器?
答案 0 :(得分:2)
ASP.NET Core根本不提供任何模块支持。它被设计成一个简单的开箱即用容器,第三方IoC容器可以插入。
因此没有自动注册,组装扫描,装饰器,拦截器或模块。如果你需要它们,你需要使用第三方框架(AutoFac,StructureMap等)。
第三方库使用注册方法进行注册,注册方法在services.AddXxx()
方法中称为ConfigureServices
。
public static class MyLibraryServiceCollectionExtensions
{
public static IServiceCollection AddMyLibrary(this IServiceCollection services)
{
services.TryAddScoped<IMyService,MyService>();
return services;
}
}
这是注册库的首选方法(因为它不依赖于任何IoC容器,除了内置的IServiceCollection
,第三方容器在插入ASP.NET Core时也使用),用于东西就像“业务逻辑库”一样,实际上没有这样的东西(之前模块很有用)。
答案 1 :(得分:1)
只需添加其他好的答案,您就可以使用例如SimpleInjector。它是一个出色的DI容器,支持.Net Core(以及ASP.Net Core)。有关如何将其与.Net Core here一起使用的详细信息。
答案 2 :(得分:0)
您可以从nuget here尝试ServiceCollection.Extensions.Modules
答案 3 :(得分:-4)
Asp.Net Core提供开箱即用的DI框架,它允许您为每个解决请求,每个Http请求或单个添加一个对象。
所有这些都是在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