2013-10-17 3 views
3

다른 게시물에서이 검색을 시도했지만 답변을 찾을 수 없어 새로운 질문을 만들었습니다.MEF - 모든 가져 오기에 내보내기가 필요합니까?

ETL 시스템을 구축 중입니다. 이제

I가 다음과 같은 수입이있는 클래스 :

 [Import] 
     public IDataExtractor DataExtractor { get; set; } 
     [Import] 
     public IDataTransformer DataTransformer { get; set; } 
     [Import] 
     public IDataValidator DataValidator { get; set; } 
     [Import] 
     public IDataPublisher DataPublisher { get; set; } 
     [Import] 
     public IDataUpdater DataUpdater { get; set; } 

내 program.cs 컴포지션 다음과 같은 코드가 있습니다 ConfigKeys은 [] 내 설정 관리

  var catalog = new AggregateCatalog(); 
      if (!string.IsNullOrEmpty(ConfigKeys["Extractor"])) 
       catalog.Catalogs.Add(new DirectoryCatalog(ConfigKeys["Extractor"])); 
      if (!string.IsNullOrEmpty(ConfigKeys["Transformer"])) 
       catalog.Catalogs.Add(new DirectoryCatalog(ConfigKeys["Transformer"])); 
      if (!string.IsNullOrEmpty(ConfigKeys["Validator"])) 
       catalog.Catalogs.Add(new DirectoryCatalog(ConfigKeys["Validator"])); 
      if (!string.IsNullOrEmpty(ConfigKeys["Publisher"])) 
       catalog.Catalogs.Add(new DirectoryCatalog(ConfigKeys["Publisher"])); 
      if (!string.IsNullOrEmpty(ConfigKeys["Updater"])) 
       catalog.Catalogs.Add(new DirectoryCatalog(ConfigKeys["Updater"])); 
      var container = new CompositionContainer(catalog); 
      container.ComposeParts(this); 

입니다 시스템, 여기서 지정할 수있는 각 추출기, 변환기, Validator 등의 dll 경로입니다.

전체 프로세스 i s : 추출, 변환, 검증, 게시, 업데이트.

특정 시간은 실행될 3 가지 기능인 추출, 변환, 게시입니다. Config 시스템에 Validator dll의 경로가 없다면 IDataValidator 인터페이스의 인스턴스를 원하지 않습니다. 그러나 공백을 지정하면 작성 중에 오류가 발생합니다.

오류 : 구성은 변경되지 않습니다. 변경 내용은 다음 오류로 인해 거부되었습니다. 구성에서 여러 가지 구성 오류가 발생했으며 4 가지 원인이 있습니다. 근본 원인은 아래에 제공됩니다. 자세한 내용은 CompositionException.Errors 속성을 검토하십시오. "컴포지션에서 단일 구성 오류가 발생했습니다. 근본 원인은 아래에 나와 있습니다. 자세한 내용은 CompositionException.Errors 속성을 검토하십시오. \ r \ n \ r \ n1) 제약 조건과 일치하는 내보내기를 찾을 수 없습니다 : \ n \ tContractName \ tCTP.DCU.Models.Interfaces.IDataTransformer \ n \ tRequiredTypeIdentity \ tCTP.DCU.Models.Interfaces.IDataTransformer \ r \ n "

내 질문은 : 모든 가져 오기에 대해 내가 내보내기가 없을 수 있습니다. 그 것을 우아하게 다루기 위해서. MEF에서 그렇게 할 수있는 방법이 있습니까? 이 시나리오를 어떻게 처리 할 수 ​​있습니까? 대체를 위해 빈 더미 스텁을 만드는 것을 생각했지만 실제로 모든 사람들이하는 일이 무엇입니까?

감사합니다. 당신이 [Import] 선택 사항 확인하려면

답변

9

, 당신은 AllowDefault를 사용할 수 있습니다

[Import(AllowDefault = true)] 
public IDataTransformer DataTransformer { get; set; } 

을 다음 DataTransformer 속성이 null을 남아있을 것입니다 일치 [Export]이없는 경우.

+0

아름다움 ...... Thx @Porges – jaxxbo

관련 문제