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



有什么方法可以注册一个"一网打尽";net核心依赖项注入?它使用它所拥有的任何依赖项并生成一个实例?我知道这在旧的框架应用程序中有效(使用StructureMap(,并且找不到在.net核心中实现这一点的方法(如果不使用额外的NuGet包(。作为一个非常简单的例子,试图获取UnkownClass会抛出异常

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
namespace DICatchAllTest
{
class Program
{
static void Main(string[] args)
{
var services = new ServiceCollection().AddLogging()
.AddSingleton<KnownClass>();
var serviceProvider = services.BuildServiceProvider();
serviceProvider.GetRequiredService<UnknownClass>();
}
}
public class KnownClass
{
public KnownClass(ILogger<KnownClass> logger, UnknownClass unknownClass)
{
//Set these to properties to be used late
}
}
public class UnknownClass
{
public UnknownClass(ILogger<UnknownClass> logger)
{
//Set these to properties to be used late
}
}
}

我想用"一网打尽";您的意思是希望DI容器本身能够找到所需的类型,而无需注册它们。这确实是一些DI框架所具有的特性,但.net框架没有。但是,有许多库可以让您实现这一点。例如Scrutor。下面是一个如何使用它的例子

正如@Steven所解释的,它不是开箱即用的.net核心DI容器所支持的。因此,我将研究此功能的第三方容器。

最新更新