如何使用MEF和DirectoryCatalog填充对象的IEnumerable属性

时间:2014-10-28 07:52:24

标签: c# castle-windsor mef

我基本上想要实现的是将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>());
    }
}

我做错了什么?我在MefInstallerModuleAInstaller - 类上尝试了不同的属性和合同名称。我还尝试使用CompositionBatch组合部件但没有成功。非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

没关系,我已经解决了。问题是ModuleAInstaller - 类的属性。

使用

一切正常
[Export(typeof(IWindsorInstaller))]
public class ModuleAInstaller : IWindsorInstaller
{
    [...]
}