我在没有服务密钥的情况下注册了同一接口的许多不同实现,然后添加
container.Register<IMyInterface, ImplementationA>();
container.Register<IMyInterface, ImplementationB>();
container.RegisterMany<ImplementationC>(serviceKey: "myServiceKey");
public class ImplementationA: IMyInterface
{
}
public class ImplementationB: IMyInterface
{
}
public class ImplementationC: IMyInterface, IMyInterface2
{
}
现在,当我调用解析所有IMyInterface实例时,将获得ImplementationA,ImplementationB和ImplementationC
var iMyInterfaceImplementations = container.ResolveMany<IMyInterface>();
Assert.Equals(iMyInterfaceImplementations.Count() == 3);
如果提供serviceKey,我只会得到ImplementationC
var iMyKeyedInterfaceImplementations = container.ResolveMany<IMyInterface>(serviceKey: "myServiceKey);
Assert.Equals(iMyKeyedInterfaceImplementations.Coud() == 1);
有没有办法获取所有非键实现?因此,如果我打电话container.ResolveMany(放在这里要放什么?)
我将获得实现A和实现B,但不能获得实现C。
该解决方案应该是通用的。最后,我不想仅跳过ImplementationC,而不必跳过所有未加密的IMyInterface注册。我已经尝试过
container.ResolveMany<IMyInterface>(serviceKey: DefaultKey.Value);
但是返回一个我的IMyInterface实现,而不是我注册的两个。
您需要的是:
var defaultItems = container.Resolve<KeyValuePair<DefaultKey, IMyInterface>[]>();