Как устранить рекурсивную зависимость C#

#c# #.net #design-patterns #dependency-injection #clean-architecture

Вопрос:

У меня проблема с двумя интерфейсами, вызывающими друг друга.
В моей модели каждый компонент может содержать сетку. И каждая сетка может содержать Компонент.
Я пытаюсь реализовать картограф для этой модели с помощью внедрения зависимостей.

 public interface IComponent
{
    //if we found a grid in the content, we should call Map method from IGrid 
    ComponentViewModel Map(IContent content);
}

public interface IGrid
{
    //if we found a component in the content, we should call Map method from IComponent 
    GridViewModel Map(IContent content);
}
 

Но теперь у меня есть ошибка «Обнаружена рекурсивная зависимость».

Я исправил это, когда изменил его на статические классы, но я думаю, что это грязный хак.

Я также попытался использовать factory для создания экземпляра для этих интерфейсов в обоих методах.

         var container = Current.Factory.Concrete as ServiceContainer;
        var mapper = container.GetInstance<IComponent>();
 

Но это тоже не работает, потому что каждый экземпляр интерфейса ожидает, что в его конструктор придет экземпляр другого.

Какой шаблон я должен реализовать, чтобы сохранить DI в моем проекте?

Комментарии:

1. Один из способов решить эту проблему-передать фабрику компонентов в iGrid, а факторию сетки в IComponent.