Предположим, у нас есть два компонента, зависящих друг от друга (косвенно, через интерфейсы):
public interface IAlice { ... }
public interface IBob { ... }
[Export(typeof(IAlice)), PartCreationPolicy(CreationPolicy.NonShared)]
class Alice : IAlice
{
[Import]
private IBob Bob { get; set; }
...
}
// could be defined in some assembly developed by another team
[Export(typeof(IBob)), PartCreationPolicy(CreationPolicy.NonShared)]
class Bob : IBob
{
[Import]
private IAlice Alice { get; set; }
...
}
Это приводит к сбою композиции: Сбой композиции, поскольку она не завершилась в течение 100 итераций.Скорее всего, это вызвано циклом в графе зависимостей части, которая помечена политикой неразделенного создания.
Я знаю, что я могу импортировать через объявление Lazy, но таким образом импорт будет создан по требованиюв то время как мне нужно, чтобы моя Алиса ссылалась на Боба, а Боб ссылался на тот же экземпляр Алисы.Я ожидал, что CompositionContainer разрешит такие циклы в рамках одной операции композиции, но, очевидно, это не так.
Я не могу объявить части как общие, так как мне не нужны отдельные Алиса и Боб на контейнер.Мне просто нужно, чтобы такие графы зависимостей создавались как единое целое, когда это делается в одной операции компоновки.Есть ли обходной путь?
UPD.Добавлены некоторые пояснения.