C# 使用.NET Core DI容器的未注册类型解析

C# 使用.NET Core DI容器的未注册类型解析,c#,.net-core,dependency-injection,C#,.net Core,Dependency Injection,有没有办法向.net核心依赖项注入注册“一网打尽”的功能?使用它所拥有的任何依赖项并生成实例?我知道这在旧的框架应用程序(使用StructureMap)中有效,但在.NETCore中找不到这样做的方法(不使用额外的NuGet包)。作为一个非常简单的示例,尝试获取UnkownClass会引发异常 使用Microsoft.Extensions.DependencyInjection; 使用Microsoft.Extensions.Logging; 名称空间测试 { 班级计划 { 静态void Mai

有没有办法向.net核心依赖项注入注册“一网打尽”的功能?使用它所拥有的任何依赖项并生成实例?我知道这在旧的框架应用程序(使用StructureMap)中有效,但在.NETCore中找不到这样做的方法(不使用额外的NuGet包)。作为一个非常简单的示例,尝试获取
UnkownClass
会引发异常

使用Microsoft.Extensions.DependencyInjection;
使用Microsoft.Extensions.Logging;
名称空间测试
{
班级计划
{
静态void Main(字符串[]参数)
{
var services=new servicecolection().AddLogging()
.AddSingleton();
var serviceProvider=services.BuildServiceProvider();
serviceProvider.GetRequiredService();
}
}
公共类知识类
{
公共已知类(ILogger记录器,未知类未知类)
{
//将这些属性设置为以后使用
}
}
公共类未知类
{
公共未知类(ILogger记录器)
{
//将这些属性设置为以后使用
}
}
}

我想“catch all”的意思是希望DI容器自己找到所需的类型,而不必注册它们。这确实是一些DI框架拥有的一个特性,但.net框架没有。但是,有许多库允许您实现这一点。例如是如何使用它的一个示例。

正如@Steven所解释的,它不是现成的.net core DI容器所支持的。因此,我将研究此功能的第三方容器。

当您请求一个尚未注册的所需服务时,您将得到一个例外。您希望发生什么?您可以枚举集合中的服务,检查缺少的依赖项,然后添加它们。。。听起来像是反模式。你应该知道你需要什么样的服务。但是
KnownClass
可以提供一个助手方法来注册自己,而
UnknownClass
当然不是反模式。大多数成熟的DI容器都包含这方面的特性,这是有原因的。对于集成目的和最后一分钟的注册非常有用。不过——如果可能的话——还是更喜欢自动注册,即在启动时迭代并注册所有必需的类型。但无论哪种方式,您所寻找的通常称为未注册类型解析,并且不是MS.DI所支持的,并且不可能扩展MS.DI来支持这一点。如果您真的需要它(这不是您在问题中解释的),请使用成熟的DI容器。@Steven谢谢您提供的信息。我曾怀疑如果没有一个单独的容器,这是不可能的,但我希望它能与默认实现一起工作;我认为OP是在寻找未注册的类型解析,这是不同的,而不是Scrutor在MS.DI上添加的。