Очевидно, что вызов GetExportedValue<T>
для вашего контейнера может привести к генерации нового экземпляра T
(в зависимости от CreationPolicy
, используемого для детали), но есть опция для вызова GetExport<T>
, которая вернет Вы Lazy<T>
экземпляр. Это единственная часть, которая генерируется и генерируется только один раз:
var part = container.GetExport<IMyInterface>();
В приведенном выше примере part
будет экземпляром Lazy<IMyInterface>
, поэтому при первом доступе к part.Value
делегат, связанный в Lazy<IMyInterface>
, вызывает контейнер, чтобы создать и создать IMyInterface
экземпляр и возвращается. Последующие вызовы part.Value
всегда будут возвращать этот же экземпляр.