2013-09-29 1 views
2

MEF를 사용하여 일반 기본 클래스의 파생 클래스를 가져 오는 방법을 알아 내려고하고 있습니다. 내가 플러그인을로드하기 위해 다음 코드를 사용하고일반 기본 클래스에 MEF 사용

interface IPlugin {} 

abstract class PluginBase<T> : IPlugin {} 

[Export(typeof(IPlugin))] 
class Plugin1 : PluginBase<T1> { 

    public Plugin1(T1 t1) : base(t1) {}; 

} 

[Export(typeof(IPlugin))] 
class Plugin2 : PluginBase<T2> { 

    public Plugin1(T2 t2) : base(t2) {}; 
} 

[ImportMany(typeof(IPlugin))] 
List<IPlugin> importedList { get; set; } 

: 이 클래스의 일반적인 설명이다

var aggCatalog = new AggregateCatalog(catalogList); 
var container = new CompositionContainer(aggCatalog, 
      CompositionOptions.DisableSilentRejection); 
container.ComposeParts(this); 

는하지만 빈 목록을 얻을.

답변

6

형식에 기본이 아닌 생성자가 있으므로 MEF에서 개체를 생성 할 수 없습니다. 생성자에 [ImportingConstructor] 특성을 추가하십시오. container에 T1 및 T2 개체를 추가하는 것을 잊지 마십시오.

+0

와우, 이것은 실제로 내가 생각했던 것보다 훨씬 간단했습니다. SO 시간 전에 게시해야했습니다 :). 'ImportingConstructor'속성을 시도했지만 컨테이너에 T1, T2를 추가하지 못했습니다!. – drtf

관련 문제