Dependency injection ASP.NET核心内置DI系统中的DI模块
我已经使用NInject一段时间了,现在我将在Asp.net core中启动一个项目。似乎。现在我的问题是Asp.net core是否提供了任何di容器或其他di容器提供的?Asp.net core提供了现成的di框架,它允许您为每个解析请求、每个Http请求或单个实例添加一个对象。 所有这些都是通过Dependency injection ASP.NET核心内置DI系统中的DI模块,dependency-injection,asp.net-core,Dependency Injection,Asp.net Core,我已经使用NInject一段时间了,现在我将在Asp.net core中启动一个项目。似乎。现在我的问题是Asp.net core是否提供了任何di容器或其他di容器提供的?Asp.net core提供了现成的di框架,它允许您为每个解析请求、每个Http请求或单个实例添加一个对象。 所有这些都是通过ConfigureServices方法完成的 例: public void配置服务(IServiceCollection服务) { //您的配置 //添加应用程序服务。 services.AddTr
ConfigureServices
方法完成的
例:
public void配置服务(IServiceCollection服务)
{
//您的配置
//添加应用程序服务。
services.AddTransient();
services.AddTransient();
}
你可以在这里了解更多
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;
}
}
公共静态类MyLibraryServiceCollectionExtensions
{
公共静态IServiceCollection AddMyLibrary(此IServiceCollection服务)
{
services.TryAddScoped();
返回服务;
}
}
这是注册库的首选方式(因为它不依赖于任何IoC容器,除了内置的
IServiceCollection
,当插入ASP.NET内核时,第三方容器也会使用它),对于“业务逻辑库”之类的东西,实际上没有这样的东西(以前模块很有用)。它是一个出色的DI容器,支持.NETCore(以及ASP.NETCore)。请参阅如何将其与.Net Core一起使用的详细信息。您可以从nuget尝试ServiceCollection.Extensions.Modules如果有模块支持,它并不能真正回答OPs问题,模块是在每个类库中定义的,它是否在那里注册,并且主应用程序仅在引导过程中加载模块类。为什么它不回答这个问题?问题是关于asp.net对DI的核心支持,答案是它有现成的,那么您的POV会给出什么样的答案?如果ninject已经存在OOB,我们为什么要推荐另一个类似它的DI呢?不,问题不在于ASP.NET对DI的核心支持,OP知道它存在。他特别询问了有关模块的问题。模块是放置在库中的类,它执行注册,而不是在邮件应用程序中执行注册。您可以在这里阅读Ninject中的模块。其他国际奥委会也有(CastleWindsor、Autofac、Unity Container)。但是ASP.NETCore的DI没有这个功能,因为我在回答中指出了你误解了答案的原因。答案清楚地表明可以使用Ninject。
public static class MyLibraryServiceCollectionExtensions
{
public static IServiceCollection AddMyLibrary(this IServiceCollection services)
{
services.TryAddScoped<IMyService,MyService>();
return services;
}
}