У меня есть оболочка IoC, которая использует MEF в качестве контейнера DI, применимый фрагмент оболочки показан ниже.
public static bool TryGetComponent<T>(out T component)
{
CompositionContainer container = RetrieveContainer();
T retrievedComponent = container.GetExportedValueOrDefault<T>();
if (retrievedComponent.Equals(default(T)))
{
component = default(T);
return false;
}
component = retrievedComponent;
return true;
}
Для большинства экспортируемых компонентов в CompositionContainer для параметра CreationPolicy задано значение Any.
[PartCreationPolicy(CreationPolicy.Any)]
Для типов, которые я создаю, я могу легко использовать следующий атрибут импорта, чтобы заставить MEF обслуживать экспортированные типы как экземпляры NonShared.
[Import(RequiredCreationPolicy = CreationPolicy.NonShared)]
Однако, поскольку моя оболочка IoC также должна использоваться классами, которые не используют MEF или какие-либо из его атрибутов импорта, и должны использовать мой API IoC для получения экземпляров экспортируемых типов. Мне нужен способ указать CreationPolicy, когда я программно использую CompositionContainer для GetExports и GetExportedValues. Возможно ли это вообще без использования атрибутов импорта?