У меня есть a
экземпляр A
и b
экземпляр B
Dependency Injection вопрос (двунаправленная связь)
a
должен иметь возможность вызвать метод b
и b
затем должен немедленно вызвать метод a
если некоторые проверки проходить.
Для достижения этой цели я бы циклической DI
public A(B b) { _b = b; }
public void CallToB() { _b.Method(); }
public void Method() { DoSomething(); }
public B(A a) { _a = a; }
public void Method() { if (SomeCheck()) _a.Method(); }
Я знаю, что я мог бы получить Arround это, используя события и пусть b
не знать/независим от a
. Но это было бы неправильно.
Примечание: Я не видел ответа на этот вопрос, когда двунаправленная связь стала возможной.
И вот почему это лучше избегать циклических зависимостей .. (если используются интерфейсы, то есть нет цикл, установленный между самими реализациями, которые, если они выполняются с помощью IoC или другой инъекции, подключены «снаружи» цикла) – user2864740
Циклические зависимости часто указывают на недостаток дизайна - если у вас есть контроль над этими классами, я предлагаю извлечь любые общие зависимости находятся в 'A' и' B' в третьем классе, так что оба 'A' и' B' зависят от этого класса, а не друг друга. – topher