我的富域模型有一些循环引用,这是有意的。
我还在编写自己的 ORM 以获得更多控制,并检测对属性所做的更改,我使用 Unity 拦截对设置器的任何调用并触发属性更改通知(类似于 EF 的工作方式)。
问题是我得到了堆栈溢出,因为策略拦截一遍又一遍地遍历同一个对象。有没有办法让它做引用计数?
我已经确保构造函数不是循环依赖的,但我仍然需要策略注入来停止重复递归相同的对象。
我的富域模型有一些循环引用,这是有意的。
我还在编写自己的 ORM 以获得更多控制,并检测对属性所做的更改,我使用 Unity 拦截对设置器的任何调用并触发属性更改通知(类似于 EF 的工作方式)。
问题是我得到了堆栈溢出,因为策略拦截一遍又一遍地遍历同一个对象。有没有办法让它做引用计数?
我已经确保构造函数不是循环依赖的,但我仍然需要策略注入来停止重复递归相同的对象。
当你有一个循环引用时,你可以注入函数来构建它们,而不是注入对象:
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 的函数