我正在使用MEF(来自nuget的System.Composition)+ Common.Logging并且拥有调用ILog的类,例如,
[Export(typeof(ITranslator))]
public class ATranslator : BaseTranslator
{
[ImportingConstructor]
public ATranslator(ILog log)
{
...
}
记录器实例可以通过log = LogManager.GetLogger<ITranslator>();
从Common.Logging获得,但是如何将其插入到我的合成容器中?
var container = new ContainerConfiguration()
.WithAssembly(typeof(ITranslator).Assembly)
.CreateContainer();
container.SatisfyImports(this);
所以我可以
[ImportMany]
private IEnumerable<ITranslator> Translators { get; set; }
不
System.Composition.Hosting.CompositionFailedException:没有导出 找到合同'ILog' - &gt;部分的导入'log'需要 'ATranslator' - &gt;部分'ITranslator []'的导入'item'需要 - &GT;初始请求合同'IEnumerable {IsImportMany = True}'
需要
答案 0 :(得分:1)
也许您可以尝试将ILog导出为其他类中的属性?
public class LogExporter
{
[Export(typeof(ILog))]
public ILog Log
{
return LogManager.GetLogger<ITranslator>();
}
}
或者,您可以尝试使用代码而不是属性ComposeExportedValue Method来执行此操作:
container.ComposeExportedValue<ILog>(LogManager.GetLogger<ITranslator>());