我需要向我们现有的代码添加一些扩展点,并且我一直将 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));
}
}
}
换句话说,消费者负责实例化它需要的 RNG,包括提供每个实例所需的种子。
我想做的是让 MEF 发现并实例化具体的 RNG 实现(使用 DirectoryCatalog)。我不确定如何实现这一目标。我可以公开一个 Generators 属性并将其标记为 [Import],但是如何提供所需的种子?
我还缺少其他方法吗?