2

我有多个 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();

我认为 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 创建该类型的多个实例的好例子。

4

0 回答 0