CommonServiceLocator for MEF, a service is a service.
Today, I finally got around to uploading a CommonServiceLocator adapter for MEF. The code is actually quite simple thanks to Chris Tavares providing ServiceLocatorImplBase public class MefServiceLocator : ServiceLocatorImplBase { private ExportProvider _provider; public MefServiceLocator(ExportProvider provider) { _provider = provider; } protected override object DoGetInstance(Type serviceType, string key) { IEnumerable<Export< object >> exports; string contract; if (key == null ) { contract = CompositionServices.GetContractName(serviceType); exports = _provider.GetExports< object >(contract); } else { exports = _provider.GetExports< object >(key); contract = key; } if (exports.Count() > 0) return exports.First().GetExportedObject(); else throw new ActivationException( string .Format( "Could not locate any instances of contract {0}" , key)); } protected override IEnumerable< object > DoGetAllInstances(Type serviceType) { var exports = _provider.GetExportedObjects< object >( CompositionServices.GetContractName(serviceType)); return exports; } } One thing you’ll notice is that in DoGetInstance, I am calling to GetExports and then manufacturing only the first export that I return
View original here:
CommonServiceLocator for MEF, a service is a service.


