首页 > 解决方案 > .NET Core 3.1 中的链式依赖注入

问题描述

我有以下代码

services.AddSingleton<IFancyService>(new FancyServiceA());
services.AddSingleton<IFancyService>(new FancyServiceB());
services.AddSingleton<IFancyService>(new FancyServiceC());

对于. IFancyService_ IFancyService做装饰的代码实际上并不知道实现,它只知道接口。

有没有办法做类似的事情:

services.AddSingleton<IFancyServiceDecorator>(
    sp => new FancyServiceDecorator(sp.GetRequiredServices<IFancyService>()));

这将确保有 3 个IFancyServiceDecorator已注册实例(包装每个 , , 的装饰FancyServiceAFancyServiceBFancyServiceC

我当前的实现依赖于这样的东西,由于单例的多次实例化,我相信这是一种反模式:

var sp = services.BuildServiceProvider();
var fancyServices = sp.GetRequiredService<IFancyService>();
foreach (var fs in fancyServices)
{
    services.AddSingleton(new FancyServiceDecorator(fs));
}

提前致谢!

标签: c#.net-coredependency-injection

解决方案


推荐阅读