是否可以在 .NET Core 中按约定注册依赖项?



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

.NET Core DI 容器是否支持此功能?如果没有,是否有计划或第三方库来支持这一点?

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

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));

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

.NET Core DI 容器是否支持此功能?如果没有,有没有 计划或第三方库来支持这一点?

简短回答:否

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

替换默认服务容器

内置服务容器旨在满足 框架和大多数消费者应用程序都建立在它之上。然而 开发人员可以将内置容器替换为他们喜欢的容器 容器。ConfigureServices方法通常返回 void,但如果 它的签名更改为返回IServiceProvider,不同的 可以配置和返回容器。有许多国际奥委会 可用于 .NET 的容器。

(强调我的(

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

如果没有,是否有计划或第三方库来支持这一点?

试试这个 https://github.com/khellang/Scrutor

最新更新