1

我正在注册一堆没有服务密钥的同一接口的不同实现,然后添加

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 实现,而不是我注册的两个。

4

1 回答 1

0

这是相关文档https://github.com/dadhi/DryIoc/blob/master/docs/DryIoc.Docs/RegisterResolve.md#resolving-as-keyvaluepair-wrapper

你需要的是:

var defaultItems = container.Resolve<KeyValuePair<DefaultKey, IMyInterface>[]>(); 
于 2019-11-21T20:12:37.927 回答