Имам 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 или някой от неговите атрибути за импортиране и трябва да използва моя IoC API, за да получи екземпляри, експортирани типове. Имам нужда от начин да посоча CreationPolicy, когато използвам програмно CompositionContainer за GetExports и GetExportedValues. Това дори възможно ли е без използване на атрибути за импортиране?