我正在使用MEF作为IoC容器。
如果请求类位于Foo.UI. *命名空间中,我希望ILogger
解析为ClientLogger
,否则它应解析为Logger
。我可以这样做吗?
答案 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的预览。