我有
Singleton<ICache, LocalClusterCache>
Singleton<ICache, CloudCache>
在同一个控制器中我想同时使用两者,但DI不允许我可以改为使用
Singleton<LocalClusterCache, LocalClusterCache>
Singleton<CloudCache, CloudCache>
但我不认为这是正确的方式
另一个问题:
我希望Singleton<ICache, LocalCache>
是InternalApiController中的不同实例,而PublicAPIController中的另一个实例我可以在这些控制器中使用私有静态var,它可以工作但不是M $&#39; DI&#39;模式,我困惑
针对第一个问题的EDIT解决方案
services.AddSingleton<ClassA>(); // same interface
services.AddSingleton<ClassB>();
// then in controller
SomeInterface classA = (ClassA)provider.GetService(typeof(ClassA));
SomeInterface classB = (ClassB)provider.GetService(typeof(ClassB));
确实有效(不确定它是否以100%正确方式完成M $方式)
答案 0 :(得分:1)
如果依赖关系是上下文的,那么创建一个抽象工厂并将其注册到容器以进行注入是很常见的。这样,依赖者就有机会根据工厂暴露的东西进行挑选,而不会立即将其绑定到具体的类。