我有一个ASP.NET核心项目(我的第一个)需要两个内部“序列发生器”来执行特定任务。第一个是这样实现的:
在Startup.cs ConfigureServices方法中:
services.AddSingleton<ISequencer, ProfileSequencer>();
当然,我已经定义了界面和实现,并且它运行良好。但是我不确定如何添加第二个定序器,它实现了相同的接口但实现略有不同。
services.AddSingleton<ISequencer, ChargeSequencer>();
ASP.NET并没有抱怨这一点,但现在当我将ISequencer注入我的类时,我无法想象它是如何知道使用哪个单例。我怀疑(但不确定)第二个单身人士有效地取代了第一个。
这里可能有一些不好的设计决定,所以我会接受一个答案,描述我如何注入两个实现相同界面的不同单例,或者如果有必要另一个合理的方法来解决这个问题。谢谢!
答案 0 :(得分:0)
无法注册相同接口的两个服务 - 第二个注册将首先覆盖。但我建议你快速解决你的问题:
1)创建嵌套接口并使用它们进行注册:
ISomeSpecificSequencer : ISequencer {}
IOtherSpecificSequencer : ISequencer {}
2)使用工厂模式
interface ISequencerFactory
{
ISequencer GetSequencer(ISequencerOptions someOptions)
}
因此,在您的代码中,您注入ISequencerFactory
,然后使用某个选项(可能是string
,enum
,Type
等)来确定您需要的类< / p>