Can I control object creation using MEF?

Posted by Akash on Stack Overflow See other posts from Stack Overflow or by Akash
Published on 2009-06-22T14:29:17Z Indexed on 2010/05/07 11:48 UTC
Read the original article Hit count: 180

Filed under:

I need to add some extension points to our existing code, and I've been looking at MEF as a possible solution. We have an IRandomNumberGenerator interface, with a default implementation (ConcreteRNG) that we would like to be swappable. This sounds like an ideal scenario for MEF, but I've been having problems with the way we instantiate the random number generators. Our current code looks like:

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);
        }
    }
}

In other words, the consumer is responsible for instantiating the RNGs it needs, including providing the seed that each instance requires.

What I'd like to do is to have the concrete RNG implementation discovered and instantiated by MEF (using the DirectoryCatalog). I'm not sure how to achieve this. I could expose a Generators property and mark it as an [Import], but how do I provide the required seeds?

Is there some other approach I am missing?

© Stack Overflow or respective owner

Related posts about MEF