2016-10-08 5 views
0

인스턴스와 System.Composition MEF ImportingConstructor을 수행하는 방법 Common.Logging에서 log = LogManager.GetLogger<ITranslator>();을 통해 사용할 수 있지만 이것을 구성 컨테이너에 어떻게 플러그인합니까?</p>이 <pre><code>[Export(typeof(ITranslator))] public class ATranslator : BaseTranslator { [ImportingConstructor] public ATranslator(ILog log) { ... } </code></pre> <p>로거 인스턴스는, 내가 MEF (nuget에서 System.Composition) + Common.Logging를 사용하여 예를 들어 ILOG를 호출 클래스를 가지고있어

 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 '->'ITranslator [] '의 가져 오기'항목 '에 필요합니다. 계약 초기 요청에서 필요합니다.-> IEnumerable {IsImportMan y = True} '

답변

1

아마도 다른 클래스의 속성으로 ILog로 내보내기를 시도 할 수 있습니까?

public class LogExporter 
{ 
    [Export(typeof(ILog))] 
    public ILog Log 
    { 
     return LogManager.GetLogger<ITranslator>(); 
    } 
} 

또는 당신은 속성 대신 코드로는 ComposeExportedValue Method을 사용하여이 작업을 수행하는 시도 할 수 있습니다 : 흥미로운 아이디어

container.ComposeExportedValue<ILog>(LogManager.GetLogger<ITranslator>()); 
+0

합니다. LogExporter는 어떻게 사용합니까? – tofutim

+0

LogExporter를 사용하지 않아도 작동한다고 생각합니다.이 속성을 내보내기위한 더미 클래스 일뿐입니다. 해볼 수 있니? – YuvShap

+0

방금 ​​해봤지만 어떻게 작동하는지 알 수는 없지만 작동하는 것처럼 보입니다. :) – tofutim