Мне нужно добавить несколько точек расширения в наш существующий код, и я рассматривал MEF как возможное решение. У нас есть интерфейс IRandomNumberGenerator с реализацией по умолчанию (ConcreteRNG), которую мы хотели бы заменить. Это звучит как идеальный сценарий для MEF, но у меня возникли проблемы с тем, как мы запускаем генераторы случайных чисел. Наш текущий код выглядит так:
public class Consumer
{
private List<IRandomNumberGenerator> generators;
private List<double> seeds;
public Consumer()
{
generators = new List<IRandomNumberGenerator>();
seeds = new List<double>(new[] {1.0, 2.0, 3.0});
foreach(var seed in seeds)
{
generators.Add(new ConcreteRNG(seed));
}
}
}
Другими словами, потребитель несет ответственность за создание необходимых ему ГСЧ, включая предоставление начального числа, которое требуется каждому экземпляру.
Что я хотел бы сделать, так это чтобы конкретная реализация ГСЧ была обнаружена и создана MEF (используя DirectoryCatalog). Я не уверен, как этого добиться. Я мог бы выставить свойство Generators и пометить его как [Импорт], но как мне предоставить необходимые семена?
Есть ли какой-то другой подход, который мне не хватает?