我刚刚使用.net core(1.1)开始一个新项目,并希望在DI容器中注册子程序集中的服务。在之前的项目中,我已经在具体类中存在的程序集中注册了服务,这允许我有一个公共接口,但是私有(或内部)实现。
我无法在.net核心中看到实现这一点的方法,而不是自己编写某种程序集发现功能(我不太难)。
AutoFac使用模块,Ninject使用NinjectModule,LightInject使用ICompositionRoot,在.net核心中是否存在等效(不替换DI框架)。
答案 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优惠,如果它是一个很棒的应用,那么在您需要它之前不会花很长时间。