在Autofac中是否可以解析一个类型的所有服务,即使它们是用名称或键注册的? [英] Is it possible in Autofac to resolve all services for a type, even if they were registered with a name or key?

查看:0
本文介绍了在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆