MEF и два экземпляра одного класса
Как поместить два экземпляра одного класса или интерфейса в MEF? Как бы я их получить?
1 ответ
По умолчанию любая деталь, зарегистрированная в 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).