是否可以按照惯例在.NET Core中注册依赖项?

dri*_*zie 3 dependency-injection .net-core asp.net-core

一些容器允许按名称注册.Ninject就是一个例子.

.NET Core DI容器是否支持此功能?如果没有,是否有计划或第三方图书馆支持这个?

Nko*_*osi 6

.NET Core DI容器是否支持此功能?如果没有,是否有计划或第三方图书馆支持这个?

简答:NONO

来源:ASP.NET核心中的依赖注入简介

替换默认服务容器

内置服务容器旨在满足框架的基本需求以及构建在其上的大多数消费者应用程序.但是,开发人员可以使用其首选容器替换内置容器.该ConfigureServices方法通常返回void,但如果将其签名更改为return IServiceProvider,则可以配置并返回不同的容器.有许多可用于.NET的IOC容器.

(强调我的)

有了它,你可以检查Ninject是否有.net核心的扩展,看看你是否可以集成它.

  • 从技术上讲,你可以,但你必须建立自己的扩展方法来做一些反射. (3认同)

Dan*_*iel 6

您可以编写自己的约定,一个简单的示例如下所示:

Assembly.GetAssembly(typeof(Startup))
    .ExportedTypes
    .Where(t => t.IsClass)
    .SelectMany(t => t.GetInterfaces(), (c, i) => new {Class = c, Interface = i})
    .ToList()
    .ForEach(x => services.AddTransient(x.Interface, x.Class));
Run Code Online (Sandbox Code Playgroud)

您可以扩展它以包含抽象类、非公共类型等。