Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dependency injection ASP.NET核心内置DI系统中的DI模块_Dependency Injection_Asp.net Core - Fatal编程技术网

Dependency injection ASP.NET核心内置DI系统中的DI模块

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

我已经使用NInject一段时间了,现在我将在Asp.net core中启动一个项目。似乎。现在我的问题是Asp.net core是否提供了任何di容器或其他di容器提供的?

Asp.net core提供了现成的di框架,它允许您为每个解析请求、每个Http请求或单个实例添加一个对象。 所有这些都是通过
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;
    }
}