我有一个知道如何刷新Math组件的类(MathController) 该类使用辅助类来根据时间表确定何时触发刷新。
我想要做的是将助手类添加到我的IoC容器中。
目前,IoC创建了MathController。由于辅助类需要从MathController接收Action,我不知道如何在不进入循环依赖方案的情况下执行此操作。
这是我作为场景示例创建的示例。
void Main()
{
var mathController = new MathController();
}
class MathController
{
private readonly StateMonitor _stateMonitor;
public MathController()
{
_stateMonitor = new StateMonitor(RefreshMath);
_stateMonitor.Monitor();
}
public void RefreshMath()
{
Debug.WriteLine("Math has been refreshed");
}
}
class StateMonitor
{
private readonly Action _refreshCommand;
public StateMonitor(Action command)
{
_refreshCommand = command;
}
public void Monitor()
{
Debug.WriteLine("Start monitoring");
Thread.Sleep(5000);
Debug.WriteLine("Something happened, we should execute the given command");
_refreshCommand();
}
}
答案 0 :(得分:2)
您的IoC容器可能支持某种方式来执行此操作。例如,NInject允许您注册一个可以为您处理初始化的提供程序(基本上是一个工厂方法)。如果你说哪个IoC容器和放大器可能会有帮助。你正在使用的版本。
另一种方法是将StateMonitorFactory
注入MathController
,而不是StateMonitor
本身。然后工厂将构建StateMonitor
。所以MathController可能看起来像:
public MathController(StateMonitorFactory fact)
{
_stateMonitor = fact.CreateStateMonitor(RefreshMath);
_stateMonitor.Monitor();
}
第三种选择是让StateMonitor
具有初始化方法。在这种情况下,StateMonitor
构造函数将变为无参数,但您将使用Start(Action command)
之类的签名向其添加另一个方法,并且MathController
将负责调用它。