По умолчанию любая деталь, зарегистрированная в MEF, использует одноэлементную стратегию управления временем жизни (по одной на контейнер). Это указывается по умолчанию CreationPolicy
из Shared
. Я думаю, вам нужно четко понимать, что вам нужно ...
Вы хотите новый экземпляр каждый раз, когда сочиняете?
Если это так, вы можете добавить PartCreationPolicyAttribute
к вашему экспорту:
[PartCreationPolicy(CreationPolicy.NonShared), Export(typeof(IFoo))]
public class Foo : IFoo { }
Каждый раз, когда вы создаете класс с использованием своего контейнера, вы получаете новый экземпляр Foo
.
Вы хотите два независимых экземпляра одновременно?
Возможно, вы захотите придумать альтернативный шаблон для получения экземпляров ваших частей. Вы можете использовать ExportFactory
, который позволит вам создавать новые экземпляры, когда вам это нужно, например:
[Import]
public ExportFactory<IFoo> Factory { get; set; }
С:
public IFoo CreateFoo()
{
return Factory.CreateExport().Value;
}
(Чтобы использовать ExportFactory<T>
с приложениями, не относящимися к Silverlight, вы должны загрузить его здесь - ExportFactory<T>
никогда не входил в .NET 4, только Silverlight).