【问题标题】:Does Dotnet Core implement Composition Root discovery?Dotnet Core 是否实现组合根发现?
【发布时间】:2018-02-17 02:01:04
【问题描述】:

我刚刚使用 .net core (1.1) 开始一个新项目,并希望在 DI 容器中注册子程序集中的服务。在以前的项目中,我在具体类所在的程序集中注册了服务,这允许我拥有一个公共接口但一个私有(或内部)实现。

如果不自己编写某种程序集发现功能,我看不到在 .net 核心中实现此功能的方法(我知道并不难)。

AutoFac 使用 Modules,Ninject 使用 NinjectModule,LightInject 使用 ICompositionRoot,.net core 中是否有等价物(不替代 DI 框架)。

【问题讨论】:

  • 您想通过内部实现实现什么目标?
  • 没有必要让具体的实现暴露在程序集之外。
  • 也不需要隐藏。
  • 是的。我不希望经验不足的开发人员尝试访问他们不应该直接访问的类。潜在地,同一接口的多个实现只能从 DI 中实例化,如果实现是公共的,很容易选择错误的。

标签: c# dependency-injection .net-core


【解决方案1】:

没有像 Autofac 或 Castle Windsor 这样的模块。

您也许可以从您想要内部实现的程序集中导入 Microsoft.Extensions.DependencyInjection 并且:

公开一个扩展方法,例如:

public static IServiceCollection AddMyServices(this IServiceCollection c) 
{
    c.Register<IPublicInterface,IInternalImplementation>();
}

在应用程序中,您只需在 ConfigureServices 处调用 AddMyServices,该程序集的内部类将不可见。

这只是一个想法,但还没有尝试过。此外,如果您喜欢 DI,您可以轻松插入 Autofac。您无法从内置 DI 中获得很多 Autofac 产品,如果它是一个大型应用程序,那么您很快就会需要它。

【讨论】:

    猜你喜欢
    • 2020-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多