【发布时间】:2012-08-13 22:00:23
【问题描述】:
Autofac 是否支持仅通过名称解析服务?还是我必须始终指定服务类型?
我想做:
container.ResolveNamed("Plugin"); // or container.TryResolvedNamed("Plugin", out instance);
不是
container.ResolvedNamed<ISomeInterface>("Plugin"); // etc
其中“插件”是注册名称/密钥,而不是类型。
谢谢!
【问题讨论】:
-
这没有意义,除非你想让它返回
object。 -
实际上,这很好用,因为无论如何我都在 Xaml 绑定环境中。实际上,它是一个与 Caliburn 相关的小型集成块,如果这有助于提供更大的上下文。 Caliburn 的 Bind 类有一个方法,该方法尝试仅通过名称而不是类型从所选 IoC 容器中解析。
-
特别是:Bind.ModelChanged(...) 是有问题的方法。它尝试使用以下行通过 IoC 容器进行检索: target = IoC.GetInstance(null, containerKey);因此,Caliburn 假设提供的 IoC 风格将支持以这种方式检索。不确定 Autofac 是否能够以这种方式工作。 (IoC 只是 Caliburn 源代码中的一个外观类,它抽象出任何容器的细节......)