如何以正确的方式解决此类AspNetCore场景?

时间:2017-02-12 18:07:54

标签: asp.net .net asp.net-core

我有

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 $方式)

1 个答案:

答案 0 :(得分:1)

如果依赖关系是上下文的,那么创建一个抽象工厂并将其注册到容器以进行注入是很常见的。这样,依赖者就有机会根据工厂暴露的东西进行挑选,而不会立即将其绑定到具体的类。