Да, это возможно.
По умолчанию MEF всегда будет возвращать один и тот же экземпляр класса при заполнении импорта.Так что технически вам не нужно ничего делать, если вы хотите, чтобы это был синглтон.Это то, что MEF называет общей политикой создания.
Если вы не хотите, чтобы импорт осуществлялся из одного и того же экземпляра, вам необходимо указать его либо в атрибутах, аналогично:
[Import(RequiredCreationPolicy = CreationPolicy.NonShared)]
public MyClass : IMyInterface
Или вы можете переопределить свой собственный CompositionContainer, чтобысоздаст NonShared экземпляры по умолчанию.
Обратите внимание, что вы также можете явно указать, что вы хотите использовать общую политику создания (синглтоны):
[Import(RequiredCreationPolicy = CreationPolicy.Shared)]
public MyClass : IMyInterface
{
public MyClass() { } // you can have a public ctor, no need to implement the singleton pattern
}
Но это не обязательно, так как Shared (singleton) уже является значением по умолчанию.
Вот ссылка на документацию MEF: http://mef.codeplex.com/wikipage?title=Parts%20Lifetime, которая объясняет то, о чем я только что говорил.Вы также можете найти блоги по этой теме, выполнив поиск: «Политика создания MEF».