C# MEF2-使用ExportFactory创建多个实例<&燃气轮机;

C# MEF2-使用ExportFactory创建多个实例<&燃气轮机;,c#,dll,mef,factory,multiple-instances,C#,Dll,Mef,Factory,Multiple Instances,我有多个DLL,我想根据一些参数创建新的非共享实例。应该对我也有好处,但创建应该使用一个参数来决定创建哪种类型,我希望使用ExportFactory也能够处理创建的实例 到目前为止,我有一个加载导出DLL的组件: regisBuilder = new RegistrationBuilder(); regisBuilder.ForType<WPProvider>().Export<WPProvider>(); dirCatalog = new DirectoryCata

我有多个DLL,我想根据一些参数创建新的非共享实例。应该对我也有好处,但创建应该使用一个参数来决定创建哪种类型,我希望使用ExportFactory也能够处理创建的实例

到目前为止,我有一个加载导出DLL的组件:

regisBuilder = new RegistrationBuilder();

regisBuilder.ForType<WPProvider>().Export<WPProvider>();

dirCatalog = new DirectoryCatalog(AppDomain.CurrentDomain.BaseDirectory, regisBuilder);
agrCatalog = new AggregateCatalog(dirCatalog);

container = new CompositionContainer(agrCatalog, CompositionOptions.DisableSilentRejection);
container.ComposeParts();
regisBuilder=newregistrationbuilder();
regisBuilder.ForType().Export();
dirCatalog=newdirectorycatalog(AppDomain.CurrentDomain.BaseDirectory,regisBuilder);
agrCatalog=新的AggregateCatalog(目录目录);
容器=新的合成容器(agrCatalog,CompositionOptions.DisablesInRejection);
container.ComposeParts();
我认为WPProvider对ExportFactory来说应该是一项很好的任务,但我不知道如何做。现在我有一节课:

public class WPProvider
    {
        ExportFactory<IDCPlugin> _factory;

        [ImportingConstructor]
        public WPProvider(ExportFactory<IDCPlugin> factory)
        {
            _factory = factory;
        }

        public IDCPlugin CreateInstance()
        {
            return _factory.CreateExport().Value;
        }
    }
公共类WPProvider
{
出口工厂;
[导入构造函数]
公共WPProvider(出口工厂)
{
_工厂=工厂;
}
公共IDCPlugin CreateInstance()
{
返回_factory.CreateExport()值;
}
}
问题是,如果我有更多DLL,那么_container.GetExportedValue();行抛出CompositionException,因为它使用IDCPlugin协定找到多个类型。我认为ExportFactory已经创建,并在需要时提供给我对象。 这样_提供者将是一个包含所有导出的IEnumerable但这是一个怎样的工厂呢?


基本上,我需要一个按类型(或属性)选择并使用MEF2 ExportFactory和RegistrationBuilder创建该类型多个实例的好例子。

最后,我得到了一个使用此方法的解决方案: