【问题标题】:DI Modules in ASP.NET Core built-in DI systemASP.NET Core 内置 DI 系统中的 DI 模块
【发布时间】:2016-11-07 04:33:20
【问题描述】:

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

【问题讨论】:

  • 您误解了this 的答案。答案清楚地表明 Ninject 可以 可以使用。

标签: dependency-injection asp.net-core


【解决方案1】:

ASP.NET Core 根本不提供任何模块支持。它被设计成一个简单的开箱即用容器,第 3 方 IoC 容器可以插入其中。

因此没有自动注册、程序集扫描、装饰器、拦截器或模块。如果你想要它们,你需要使用 3rd 方框架(AutoFac、StructureMap 等)。

第 3 方库确实使用注册方法进行注册,这些方法在 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 时,第 3 方容器也使用它),例如“业务逻辑库”实际上并没有这样的东西(以前模块很有用)。

【讨论】:

    【解决方案2】:

    只是为了添加其他好的答案,您可以使用例如SimpleInjector。这是一个出色的 DI 容器,支持 .Net Core(以及 ASP.Net Core)。查看如何将其与 .Net Core here 一起使用的详细信息。

    【讨论】:

      【解决方案3】:

      您可以尝试来自 nuget here 的 ServiceCollection.Extensions.Modules

      【讨论】:

        【解决方案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

        【讨论】:

        • 如果有模块支持,它并没有真正回答 OPs 的问题,其中模块在每个类库中定义并在那里注册,主应用程序仅在引导期间加载模块类
        • 为什么不回答问题?问题是关于 DI 的 asp.net 核心支持,答案是它有一个现成的,那么你的 POV 的答案是什么?如果 ninject 已经存在 OOB,我们为什么还要建议另一个 DI?
        • 不,问题不在于 ASP.NET Core 对 DI 的支持,OP 知道它在那里。他专门询问了模块。模块是放置在库中的类,它们执行注册,而不是在邮件应用程序中执行注册。你可以在这里阅读github.com/ninject/Ninject/wiki/Modules-and-the-Kernel 关于 Ninject 中的模块。其他 IoC 也有(CastleWindsor、Autofac、Unity Container)。但是由于我在回答中指出的原因,ASP.NET Core 的 DI 没有这个
        猜你喜欢
        • 2020-06-09
        • 1970-01-01
        • 2019-02-15
        • 2019-04-27
        • 2017-07-28
        • 2016-05-26
        • 2017-09-21
        • 2020-01-23
        • 2015-08-21
        相关资源
        最近更新 更多