MEF2 - 使用ExportFactory<>创建多个实例

时间:2013-10-07 09:03:55

标签: c# dll mef factory multiple-instances

我有多个dll,我想根据一些参数创建新的非共享实例。 Something like this也应该对我有好处,但是创建应该使用参数来决定要创建哪种类型,并且我也希望使用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();

我认为WPProvider应该是ExportFactory的一项好任务,但我不知道如何。现在我有了这堂课:

public class WPProvider
    {
        ExportFactory<IDCPlugin> _factory;

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

        public IDCPlugin CreateInstance()
        {
            return _factory.CreateExport().Value;
        }
    }

问题是,如果我有更多的dll,_container.GetExportedValue(); row抛出一个CompositionException,因为它使用IDCPlugin契约创建了多个类型。我认为ExportFactory已经创建,并在我需要时为我提供了对象。 这样_provider就是一个包含所有导出的IEnumerable。 但这如何像工厂一样?

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

0 个答案:

没有答案