我已经使用NInject一段时间了,现在我将开始一个Asp.net Core项目。看起来NInject不能与Asp.net Core一起使用。那么我的问题是,Asp.net Core是否提供任何di模块就像NInject或其他di容器提供的那样?
我已经使用NInject一段时间了,现在我将开始一个Asp.net Core项目。看起来NInject不能与Asp.net Core一起使用。那么我的问题是,Asp.net Core是否提供任何di模块就像NInject或其他di容器提供的那样?
ASP.NET Core不提供任何模块支持。它的设计是为一个简单的开箱即用容器,第三方IoC容器可以插入其中。
因此,它没有自动注册、程序集扫描、装饰器、拦截器或模块。如果您需要它们,您需要使用第三方框架(AutoFac、StructureMap等)。
第三方库使用Registration方法进行注册,这些方法在ConfigureServices
方法中调用,例如:services.AddXxx()
。
public static class MyLibraryServiceCollectionExtensions
{
public static IServiceCollection AddMyLibrary(this IServiceCollection services)
{
services.TryAddScoped<IMyService,MyService>();
return services;
}
}
这是注册库的首选方式(因为它不依赖于任何IoC容器,除了内置的IServiceCollection
之外,第三方容器在插入ASP.NET Core时也会使用它),对于像“业务逻辑库”这样的东西,实际上并不存在(以前模块很有用)。
除了其他很好的答案之外,您可以使用例如SimpleInjector。它是一个出色的DI容器,支持.Net Core(以及ASP.Net Core)。有关如何在.Net Core中使用它的详细信息,请在此处查看。
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