Service Locator and MEF

Dec 14, 2010 at 10:32 AM

Guys,

 

I am a newbie in MEF/DI jargon, so please pardon my stupid question:)

I am using MEF for my composite application, for injecting dependencies, I am using attributes such as Export and ImportingConstructor etc.

But all this is done as part of the constructor, i.e. while creating a Object like

[ImportingConstructor]

Public Myclass (IMyservice myservice) {

// do something

}

Now I want to perform something of this sort,

SomeService.ShowDetails(<Get me a concrete implementation of IMyservice>).

Is this possible? I am trying create concrete implementation of IMyservice inside a function!

How does MEF performs a Service location? Do we need to use any separate Service locator (aka Common service locator) for achieving the same?

/Indro

Dec 16, 2010 at 1:36 PM
Edited Dec 16, 2010 at 1:37 PM

Based your explanation I understand that you have more tha one implementation of IMyService and you want to inject one of the implementations. You can do this

[Export("MyClass1 ", typeof(IMyService)]
public class MyClass1 : IMyService
{
}

[Export("MyClass2 ", typeof(IMyService)]
public class MyClass2 : IMyService
{
}

And when you want to inject MyClass1 in your constructor do this

[ImportingConstructor]
public Test([Import("MyClass1")] IMyService myService)
{
}

SO you now have the implementation you need. I hope I understood your question correctly.