ASP.NET Core内置DI系统中的DI模块

时间:2016-11-07 04:33:20

标签: dependency-injection asp.net-core

我已经使用NInject一段时间了,现在我将在Asp.net核心中启动一个项目。似乎NInject cannot be used with Asp.net Core。所以现在我的问题是Asp.net核心是否提供了任何di modules just as NInject或其他di容器?

4 个答案:

答案 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