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

Другие вопросы по тегам