我正在注册一堆没有服务密钥的同一接口的不同实现,然后添加
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(放什么?)
我会得到 ImplementationA 和 ImplementationB,但不会得到 ImplementationC。
解决方案应该是通用的。最后我不想只跳过 ImplementationC 而是跳过所有可能的 IMyInterface 注册,这些注册没有被键入。我已经试过了
container.ResolveMany<IMyInterface>(serviceKey: DefaultKey.Value);
但这会返回一个 IMyInterface 实现,而不是我注册的两个。