Unity Interception и классы с циркулярной ссылкой
У моей богатой модели предметной области есть круговая ссылка, и это намеренно.
Я также пишу свой собственный ORM для большего контроля и для обнаружения изменений, внесенных в свойства. Я использую Unity для перехвата любого вызова сеттеров и запуска уведомления об изменении свойства (аналогично тому, как работает EF).
Проблема в том, что я получаю переполнение стека, потому что перехват политики повторяется над одним и тем же объектом, снова и снова. Есть ли способ заставить его делать подсчет ссылок?
Я уже убедился, что конструктор не является циклически зависимым, но мне все еще нужно внедрение политики, чтобы прекратить повторное использование одних и тех же объектов.
1 ответ
Вместо внедрения объектов вы можете добавить функции для их построения, если у вас есть циклическая ссылка:
Container.RegisterType<IMyService, ImplService>(... );
public class MyClass {
private Func<IMyService> _serviceProvider;
public MyClass(Func<IMyService> serviceProvider) { _serviceProvider = serviceProvider }
public void DoStuff() {
_serviceProvider().DoSomething();
}
}
Unity внедрит функцию, которая возвращает IMyService