使用MEF解析名称空间的导入

时间:2011-06-01 15:01:44

标签: .net dependency-injection namespaces ioc-container mef

我正在使用MEF作为IoC容器。

如果请求类位于Foo.UI. *命名空间中,我希望ILogger解析为ClientLogger,否则它应解析为Logger。我可以这样做吗?

2 个答案:

答案 0 :(得分:2)

也许有这样的解决方法,使用命名导出?

[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)

我知道这不是最好的解决方案,但可能会有效。

答案 1 :(得分:1)

Thomas使用命名导出的解决方案可能是您使用.NET 4版MEF最好的解决方案。使用下一版本的MEF,您可以通过RegistrationBuilder使用约定将UI命名空间中的任何ILogger导入更改为命名导入。 IE,有效地做了托马斯建议但按惯例做的,而不是必须将它应用到你的每个类。

codeplex上提供了下一版MEF的预览。