【问题标题】:Unity Interception and classes with Circular ReferenceUnity 拦截和带有循环引用的类
【发布时间】:2013-05-30 16:54:00
【问题描述】:

我的富域模型有一些循环引用,这是故意的。

我还在编写自己的 ORM 以获得更多控制权,并检测对属性所做的更改,我使用 Unity 拦截对 setter 的任何调用并触发属性更改通知(类似于 EF 的工作方式)。

问题是我得到了堆栈溢出,因为策略拦截一遍又一遍地遍历同一个对象。有没有办法让它做引用计数?

我已经确保构造函数不是循环依赖的,但我仍然需要策略注入来停止重复递归相同的对象。

【问题讨论】:

标签: dependency-injection unity-container aop unity-interception policy-injection


【解决方案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 的函数

【讨论】:

  • 我想我可以在其中注入一个工厂甚至 Unity 本身,但它会创建很多不必要的管道代码......但我仍然认为这和我会得到的一样好团结。
猜你喜欢
  • 2019-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多