在Autofac中是否可以解析一个类型的所有服务,即使它们是用名称或键注册的? [英] Is it possible in Autofac to resolve all services for a type, even if they were registered with a name or key?
本文介绍了在Autofac中是否可以解析一个类型的所有服务,即使它们是用名称或键注册的?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在Autofac中,用户可以执行以下操作来获取所有已注册的服务:
IEnumerable<MyClass> all = Context.Resolve<IEnumerable<MyClass>>()
但是,这不包括注册为命名服务的服务。
查看Autofac源代码,这似乎是因为查询服务以获取基于TyedService或KeyedService的解析。
有没有办法将所有服务解析为IEumable,而不管它们是否使用名称注册?
推荐答案
此处的最佳选择是同时使用密钥和常规‘Typed’服务注册项目:
builder.Register<CupOfT>()
.As<IBeverage>()
.Keyed<IBeverage>("someKey");
然后您只需解析IEnumerable<IBeverage>
即可获得您想要的结果,同时还支持按键(或名称)解析它们。
如果您担心维护IBeverage
的特定默认注册,只需在其他注册上使用PreseveExistingDefaults()
(或确保最后注册您想要的默认注册)。
HTH!
尼克
这篇关于在Autofac中是否可以解析一个类型的所有服务,即使它们是用名称或键注册的?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文