是否可以在Autofac中解析某个类型的所有服务,即使它们是使用名称或密钥注册的?

Ale*_*ffe 6 inversion-of-control autofac

在Autofac中,可以执行以下操作来获取所有已注册的服务:

IEnumerable<MyClass> all = Context.Resolve<IEnumerable<MyClass>>()
Run Code Online (Sandbox Code Playgroud)

但是,这不包括那些注册为命名服务的内容.

查看Autofac源代码似乎是因为基于TypedService或KeyedService查询服务的解析.

有没有办法解决IEnumerable的所有服务,无论他们是否注册了名称?

Nic*_*rdt 7

这里最好的选择是使用密钥和常规"类型"服务注册项目:

builder.Register<CupOfT>()
    .As<IBeverage>()
    .Keyed<IBeverage>("someKey");
Run Code Online (Sandbox Code Playgroud)

然后,您可以解决IEnumerable<IBeverage>以获得您所追求的结果,同时也支持按键(或名称)解析它们.

如果您担心维护特定的默认注册IBeverage仅用于PreseveExistingDefaults()其他人(或确保您的预期默认值最后注册).

HTH!

缺口