DryIOC:解决所有默认注册,不包括键注册

问题描述 投票:1回答: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(放在这里要放什么?)

我将获得实现A和实现B,但不能获得实现C。

该解决方案应该是通用的。最后,我不想仅跳过ImplementationC,而不必跳过所有未加密的IMyInterface注册。我已经尝试过

container.ResolveMany<IMyInterface>(serviceKey: DefaultKey.Value);

但是返回一个我的IMyInterface实现,而不是我注册的两个。

ioc-container dryioc
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>[]>(); 
© www.soinside.com 2019 - 2024. All rights reserved.