기본적으로 달성하려는 것은 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>());
}
}
을 내가 잘못 뭐하는 거지? 나는 MefInstaller
과 ModuleAInstaller
- 클래스에서 서로 다른 속성과 계약 이름을 가지고 실험했다. 나는 또한 성공을 가진 CompositionBatch
를 사용하여 부속을 구성하는 것을 시도했다. 어떤 도움이라도 대단히 감사합니다!