Я почти уверен, что это будет работать:
public class SampleClass
{
[Import]
private Manager manager; //Setting it to null is redundant.
}
[Export]
public class Manager
{
}
Вам также необходимо настроить контейнер. Существуют фреймворки, которые облегчают соединение, но если нет. Это не сложно:
В начале подачи заявки вам необходимо заполнить каталог:
//http://mef.codeplex.com/wikipage?title=Using%20Catalogs
var catalog = new AggregateCatalog();
//Add AssemblyCatalogs (Single) or DirectoryCatalogs (Multiple)
catalog.Catalogs.Add(new AssemblyCatalog(typeof(IManager).Assembly));
catalog.Catalogs.Add(new DirectoryCatalog(@"myimports\"));
//Don't do this (including the same assembly twice)
//catalog.Catalogs.Add(new AssemblyCatalog(typeof(Manager).Assembly));
var container = new CompositionContainer(catalog);
container.composeParts(this);
Но вы действительно должны воспользоваться интерфейсами для импорта / экспорта.
public class SampleClass
{
[Import]
private IManager Manager;
}
[InheritedExport]
public interface IManager { }
public class Manager : IManager { }
Теперь, если указать имя и тип, в этом нет необходимости, но хорошо, если вы планируете иметь схожие экспорты, которые вам необходимо различать.
public class SomeClass
{
//This is for the specific AdvancedManager
[Import("AdvancedManager", typeof(IManager))]
private IManager AdvancedManager;
//This is for the specific SimpleManager
[Import("SimpleManager", typeof(IManager))]
private IManager SimpleManager;
//If you don't mark it as ImportMany this will fail because now there
//are 2 non-specific IManager exports.
[ImportMany]
private ICollection<IManager> AllManagers;
}
[InheritedExport]
public interface IManager { }
//This will export out as an IManager and a specifically named IManager
[Export("AdvancedManager", typeof(IManager))]
public class AdvancedManager : IManager { }
//This will export out as an IManager and a specifically named IManager
[Export("SimpleManager", typeof(IManager))]
public class SimpleManager : IManager { }