2014-10-28 3 views
0

기본적으로 달성하려는 것은 MEF와 Castle Windsor를 결합하는 것입니다. 하지만 MEF를 사용하여 시작할 수 없게되었습니다. 문제는 -Class의 compositionContainer에있는 ComposeParts으로 전화 할 때 어떤 이유로 installers 컬렉션을 채우지 못하는 것입니다.MEF 및 DirectoryCatalog를 사용하여 개체의 IEnumerable 속성을 채우는 방법

DirectoryCoatalog 단어를 적절하게로드하고 필요한 파일을 올바르게로드합니다 (ModuleA.dll 포함).

public class MefInstaller : IWindsorInstaller 
{ 
    [ImportMany] 
    public IEnumerable<IWindsorInstaller> installers { get; set; } // here the Exported Objects should be stored 

    public void Install(IWindsorContainer container, IConfigurationStore store) 
    { 
     var directory = Environment.CurrentDirectory; 

     var directoryCatalog = new DirectoryCatalog(directory); 
     var compositionContainer = new CompositionContainer(directoryCatalog); 

     compositionContainer.ComposeParts(this); 

     foreach (var windsorInstaller in installers) 
     { 
      windsorInstaller.Install(container, store); 
     } 

     Console.WriteLine("List in Field : {0}", installers.Count()); 
    } 
} 

클래스 다음과 같은 외모를 가져 :

[Export("ComponentInstaller")] 
public class ModuleAInstaller : IWindsorInstaller 
{ 
    public void Install(IWindsorContainer container, IConfigurationStore store) 
    { 
     container 
      .Register(Component.For<IFoo>().ImplementedBy<FooA>()) 
      .Register(Component.For<IBar>().ImplementedBy<BarA>()); 
    } 
} 

을 내가 잘못 뭐하는 거지? 나는 MefInstallerModuleAInstaller- 클래스에서 서로 다른 속성과 계약 이름을 가지고 실험했다. 나는 또한 성공을 가진 CompositionBatch를 사용하여 부속을 구성하는 것을 시도했다. 어떤 도움이라도 대단히 감사합니다!

답변

0

신경 쓰지 마라, 나는 그것을 풀었다. 문제는 ModuleAInstaller -Class에있는 속성입니다.

모든 사용하여 잘 작동

[Export(typeof(IWindsorInstaller))] 
public class ModuleAInstaller : IWindsorInstaller 
{ 
    [...] 
}