我基本上想要实现的是将MEF和Castle Windsor结合起来。
但我碰巧无法开始使用MEF。问题是,当我在ComposeParts
- 类的compositionContainer
上致电MefInstaller
时,由于某种原因,它不会填充installers
- 集合。
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
组合部件但没有成功。非常感谢任何帮助!
答案 0 :(得分:0)
没关系,我已经解决了。问题是ModuleAInstaller
- 类的属性。
使用
一切正常[Export(typeof(IWindsorInstaller))]
public class ModuleAInstaller : IWindsorInstaller
{
[...]
}