Как импортировать несколько экземпляров с помощью MEF? - PullRequest
3 голосов
/ 20 июля 2010

Я кодировал такую ​​услугу:

public interface IMyInterface
{
  ...
}

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

Теперь я хотел бы импортировать несколько экземпляров MyService с MEF в мою основную программу.

Как я могу это сделать?

С [Import] private IMyInterface MyService { get; set; } Я получаю только 1 экземпляр MyService. В моей основной программе я хотел бы динамически указывать количество импортируемых экземпляров MyService перед составлением MEF.

Я не хочу использовать [ImportMany], потому что я не хочу указывать номер экспорта в моей реализации MyService.

Вы можете мне помочь?

1 Ответ

6 голосов
/ 20 июля 2010

Вы, вероятно, не хотите делать это как прямой импорт, но получите экспортированное значение из контейнера несколько раз. Из-за этого вам нужно изменить политику создания на 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>());
}
...