我使用的是MEF (System.Composition from nuget) + Common.Logging,并且有调用ILog的类,例如,
[Export(typeof(ITranslator))]
public class ATranslator : BaseTranslator
{
[ImportingConstructor]
public ATranslator(ILog log)
{
...
}记录器实例可以通过Common.Logging通过log = LogManager.GetLogger<ITranslator>();获得,但是如何将其插件到组合容器中呢?
var container = new ContainerConfiguration()
.WithAssembly(typeof(ITranslator).Assembly)
.CreateContainer();
container.SatisfyImports(this);所以我可以
[ImportMany]
private IEnumerable<ITranslator> Translators { get; set; }不带
System.Composition.Hosting.CompositionFailedException :未发现合同“ILog”->的出口,该合同是进口“ATranslator”部分的“日志”所要求的,“ATranslator”部分的->是“ITranslator[]”部分的进口“项目”,“ITranslator[]”是最初请求合同“IEnumerable{ IsImportMany = True }”所需的->。
发布于 2016-10-08 07:02:31
也许您可以尝试将导出到ILog作为其他类中的属性?
public class LogExporter
{
[Export(typeof(ILog))]
public ILog Log
{
return LogManager.GetLogger<ITranslator>();
}
}或者,您可以尝试使用ComposeExportedValue法而不是属性来使用代码:
container.ComposeExportedValue<ILog>(LogManager.GetLogger<ITranslator>());https://stackoverflow.com/questions/39929591
复制相似问题