Dotnet Core是否实现了Composition Root发现?

时间:2017-09-08 07:57:30

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

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

我无法在.net核心中看到实现这一点的方法,而不是自己编写某种程序集发现功能(我不太难)。

AutoFac使用模块,Ninject使用NinjectModule,LightInject使用ICompositionRoot,在.net核心中是否存在等效(不替换DI框架)。

1 个答案:

答案 0 :(得分:0)

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

您可以从要进行内部实现的程序集中导入Microsoft.Extensions.DependencyInjection,并且:

公开扩展方法,例如:

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

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

这只是一个想法,但并未尝试过。此外,如果你喜欢DI,你可以很容易地插上Autofac。您从内置的DI中获得了很多Autofac优惠,如果它是一个很棒的应用,那么在您需要它之前不会花很长时间。