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