我已经编码了这样的服务:

public interface IMyInterface
{
  ...
}

[Export(typeof(IMyInterface))]
internal class MyService : IMyInterface
{
  ...
}


现在,我想在我的主程序中使用MEF导入MyService的几个实例。

我怎样才能做到这一点 ?

使用[Import] private IMyInterface MyService { get; set; }只能得到1个MyService实例。
在我的主程序中,我想在MEF合成之前动态指定MyService导入实例的数量。

我不想使用[ImportMany],因为我不想在我的MyService实现中指定导出的数量。

你能帮助我吗 ?

最佳答案

您可能不想将其直接导入,而是多次从容器中获取导出的值。因此,您需要将创建策略更改为NonShared,这将强制容器每次实例化一个新实例。

[Export(typeof(IMyInterface)) PartCreationPolicy(CreationPolicy.NonShared)]
internal class MyService : IMyInterface
{
  ...
}


然后从容器中获取值:

List<IMyInterface> instances = new List<IMyInterface>();
for (int i = 0; i < 10; i++) {
  instances.Add(container.GetExportedValue<IMyInterface>());
}

关于c# - 如何使用MEF导入多个实例?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3288655/

10-10 03:04