Unity 允许您命名同一接口的不同实现,然后通过名称解析它们:
var container = new UnityContainer();
// register
container.Register<IFish, OneFish>("One");
container.Register<IFish, TwoFish>("Two");
// resolve
var twoFish = container.Resolve("Two");
现在假设我有一个依赖于 IFish 并实现 ITank 的类:
class Tank : ITank
{
public Tank(IFish fish) {...}
}
如何解决 ITank 并指定要获取的 IFish 实现?
这不起作用:
container.Register<ITank, Tank>();
var tank = container.Resolve<ITank>("One");
这有效:
var fish = container.Resolve<IFish>("One");
var tank = container.Resolve<Tank>(new DependencyOverride(typeof(IFish), fish);
但它只处理简单的情况(例如在这个例子中),而不是可能有许多名为“One”的实现的一般情况。我想要的是能够告诉 Unity:
“在解析名为“One”的使用实现时,如果没有这样的实现被注册回退到未命名的实现”
是否有可以通过这种行为插入 Unity 的自定义解析器?