【发布时间】:2011-09-06 09:28:24
【问题描述】:
我使用 MEF 作为 IoC 容器。
如果请求类在 Foo.UI.* 命名空间中,我希望 ILogger 解析为 ClientLogger,否则它应该解析为 Logger。我可以这样做吗?
【问题讨论】:
标签: .net dependency-injection namespaces ioc-container mef
我使用 MEF 作为 IoC 容器。
如果请求类在 Foo.UI.* 命名空间中,我希望 ILogger 解析为 ClientLogger,否则它应该解析为 Logger。我可以这样做吗?
【问题讨论】:
标签: .net dependency-injection namespaces ioc-container mef
也许有这样的解决方法,使用命名导出?
[Export("clientLogger", typeof(ILogger))]
public class ClientLogger : ILogger {}
[Export("logger", typeof(ILogger))]
public class logger: ILogger {}
Foo.UI.* 中的请求类型是这样装饰的
[ImportingConstructor]
public MyService([Import("clientLogger", typeof(ILogger))]ILogger logger)
我知道这不是最好的解决方案,但也许它会起作用。
【讨论】:
Thomas 使用命名导出的解决方案可能是使用 .NET 4 版本的 MEF 可以做到的最好的解决方案。在 MEF 的下一个版本中,您可能可以通过 RegistrationBuilder 使用约定将 UI 命名空间中的任何 ILogger 导入更改为命名导入。 IE,有效地按照 Thomas 的建议进行操作,但按照惯例进行操作,而不必将其应用于您的每个类。
codeplex 上提供了 MEF 下一版本的预览版。
【讨论】: