2013-12-10 3 views
2

MEF에서 ImportMany에 대한 사용자 지정 메타 데이터 특성을 만들었지 만 ImportMany는 항상 null입니다.ImportMany가 사용자 지정 메타 데이터 특성과 작동하지 않습니다.

[MetadataAttribute] 
[AttributeUsage(AttributeTargets.Class ,AllowMultiple = false)] 
public class ModuleAttribute : ExportAttribute ,IModuleMetadata 
{ 
    public ModuleAttribute(string contract) 
     : base(typeof(IScreen)) 
    { 
     Name = contract; 
     Region = Region.Sidebar; 
     IsVisible = true; 
    } 

    public string Name { get; set; } 
    public string Module { get; set; } 
    public Region Region { get; set; } 
    public string DisplayName { get; set; } 
    public bool IsVisible { get; set; } 
    public string Description { get; set; } 
    public short Order { get; set; } 
    public Permissions Permissions { get; set; } 
} 

내 수업을 내보내는 방법은 다음과 같습니다. 화면 여기 typeof(IScreen)

입니다

[Module("Stock" ,Module = "Stock" ,Order = 1 ,Permissions = Permissions.View)] 
    internal sealed class StockWorkSpaceViewModel : Screen 

내 ImportMany입니다.

[ImportMany] 
public IEnumerable<Lazy<IScreen ,IModuleMetadata>> Modules { get; set; } 

어디서 잘못 될지 예측할 수 있습니다.

+0

IModuleMetadata 선언을 추가 할 수 있습니까? 일치하는 읽기 전용 속성이 있습니까? –

+0

어제 저는 클래스에서 기본 생성자를 제거 할 때 가져올 수있었습니다. 클래스에 일부 코드가있는 매개 변수없는 생성자가있는 경우 가져 오기가 작동하지 않습니다. 또한 계약 이름을 내보내기에서 삭제해야합니다. 즉, 계약 유형으로 내보내기해야합니다. –

+0

Settings라고하는 다른 사용자 지정 내보내기도 있었지만 이제 ImportMany는 ModuleExport의 형식을 포함합니다. 나는 이유를 모른다. 둘 다 메타 데이터 인터페이스가 다르지만 계약 유형은 동일합니다. –

답변

0
  1. 확인까지 ComponnetContainer.ComposeParts
  2. 확인까지 같은
  3. 확인까지 세관 속성하고 게으른 초기화에 사용되는 인터페이스해야합니다 수출입 속성을. 속성은 동일해야합니다. 즉, 세관 속성 클래스가 지연 초기화를 암시 적으로 구현합니다.
관련 문제