Получение экспортированного экземпляра детали из контейнера MEF - PullRequest
1 голос
/ 02 октября 2011

Как узнать существующий экземпляр экспортируемой детали в контейнере MEF.Если у меня есть класс A, который был скомпонован в контейнере, мне нужно в некоторых местах моего кода получить экземпляр, если я вызову GetExortedValue (), то если класс A подписан с CreationPolicy.NonShared, то он будет создан сноваМне нужен текущий.

Заранее спасибо ...

1 Ответ

2 голосов
/ 02 октября 2011

Очевидно, что вызов GetExportedValue<T> для вашего контейнера может привести к генерации нового экземпляра T (в зависимости от CreationPolicy, используемого для детали), но есть опция для вызова GetExport<T>, которая вернет Вы Lazy<T> экземпляр. Это единственная часть, которая генерируется и генерируется только один раз:

var part = container.GetExport<IMyInterface>();

В приведенном выше примере part будет экземпляром Lazy<IMyInterface>, поэтому при первом доступе к part.Value делегат, связанный в Lazy<IMyInterface>, вызывает контейнер, чтобы создать и создать IMyInterface экземпляр и возвращается. Последующие вызовы part.Value всегда будут возвращать этот же экземпляр.

...