2014-01-20 6 views
3

부분을 볼 수 있으며 모든 꽤 잘 작동하는 것 같다하지만 어떤 이유로 실제 프로젝트GetExportedValues, 나는 내가 테스트 프로젝트에서이 테스트를, 나는 이상한 MEF 문제가

이를 작동하지 내보내는 코드는 수출이 계산

public void RegisterComponents() 
    { 

     _registrationBuilder = new RegistrationBuilder(); 
     _registrationBuilder 
      .ForTypesDerivedFrom(typeof(MyType)) 
      .SetCreationPolicy(CreationPolicy.NonShared) 
      .Export(); 

     var catalog = new AggregateCatalog(); 
     catalog.Catalogs.Add(new AssemblyCatalog(typeof(MyType).Assembly, _registrationBuilder)); 


     var directoryCatalog = new DirectoryCatalog(PathToMyTypeDerived, _registrationBuilder); 
     catalog.Catalogs.Add(directoryCatalog); 

     _compositionContainer = new CompositionContainer(catalog); 
     _compositionContainer.ComposeParts(); 

     var exports = _compositionContainer.GetExportedValues<MyType>(); 
     Console.WriteLine("{0} exports in AppDomain {1}", exports.Count(), AppDomain.CurrentDomain.FriendlyName); 
    } 

0 :(어떤 아이디어 왜? 로그 파일에

나는이

싸이의 많은이된다 stem.ComponentModel.Composition 정보 : 6 : ComposablePartDefinition 'SomeOthertype'이 내보내기를 포함하지 않아 무시되었습니다. 내가 someOtherType '

UPDATE를'수출에 관심 '년후 때문에 괜찮 생각하지만

:이 link를 찾았지만 그 위에 debuging 후 나는하지 현명한 생각하지만 어쩌면 내가 제대로 따르지 않을거야. 어떤 포인터

건배

+0

CorePlugin이란 무엇입니까? MyType에서 파생됩니까? –

+0

그것은 MyType입니다, 나는 코드를 편집 할 것입니다. (나는 더 명확한 문제를 만들기 위해 이름을 변경했습니다.) – roundcrisis

+0

BTly, Roslyn으로 빌드하면 이것은 두 번째 선택되지만 지속적으로 컴파일러를 변경할 수 없습니다 : D – roundcrisis

답변

3

에 대한

덕분에 난 그냥 같은 문제를했고 this article는 나에게 많은 도움이되었습니다.

여기에는 해결할 수없는 여러 가지 이유가 설명되어 있습니다. 더 중요한 것 중 하나는 해결하려는 유형의 종속성에 대한 종속성이 등록되어 있지 않다는 것입니다.

응용 프로그램을 디버깅 할 때 출력 창에 기록되는 추적 출력이 많은 도움이 되었습니까? 유형을 확인할 수없는 이유를 정확히 설명합니다.

이 출력이 있더라도. 당신은 조금만 파헤쳐 야 할 것입니다, 왜냐하면 저는 한 단계 깊숙이 있기 때문입니다.

예 :

나는 A 형을 해결하고 싶어하고 나는이 같은 메시지가 있어요 :

System.ComponentModel.Composition 경고 : 1 : ComposablePartDefinition 'Namespace.A'거부되었습니다. 구성은 변경되지 않습니다. 변경 내용은 다음 오류로 인해 거부되었습니다. 구성에서 여러 개의 구성 오류가 발생했습니다. 근본 원인은 1 개입니다. 근본 원인은 아래에 제공됩니다. 자세한 내용은 CompositionException.Errors 속성을 검토하십시오. ContractName, 수입 'Namespace.A..ctor (매개 변수 = "B"를 설정할 수 없습니다 : ContractName Namespace.IB RequiredTypeIdentity Namespace.IB

결과 :

1) 아니오 수출은 제약 조건을 일치 찾을 수 없습니다 = "namespace.IB") '부분에서'네임 스페이스 A '. 요소 : Namespace.A..ctor (Parameter = "b", ContractName = "Namespace.IB") -> Namespace.A -> AssemblyCatalog (어셈블리 = "어셈블리, 버전 = 0.0.0.0, 문화 = 중립, PublicKeyToken = ... ")

하지만 분명히 Namespace.IB의 일부를 보았습니다. 그래서, 디버거에서, 나는 그것을 해결하려고 노력했다. 그리고 또 다른 출력물을 얻었습니다.이번에는 내 Namespace.IB의 구현은 수입품 중 하나에 누락 된 내보내기가 있었기 때문에 해결할 수 없다고 말했습니다. 기본적으로 다른 유형의 위와 동일한 메시지입니다. 그리고 이번에는 누락 된 수입에 대한 부분을 찾지 못했습니다. 이제 어떤 유형이 진짜 문제인지 파악하고 왜 등록이 이루어지지 않았는지 알았습니다.