1

我有一个知道如何刷新数学组件的类 (MathController)。
该类使用帮助类来根据时间安排确定何时触发刷新。

我想做的是将助手类添加到我的 IoC 容器中。

目前,IoC 创建了 MathController。由于辅助类需要从 MathController 接收一个动作,我不知道如何在不进入循环依赖场景的情况下做到这一点。

这是我作为场景示例创建的示例。

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();
    }
}
4

1 回答 1

2

您的 IoC 容器可能支持某种方式来执行此操作。例如,NInject 允许您注册一个可以为您处理初始化的提供程序(基本上是一个工厂方法)。如果您说您正在使用哪个 IoC 容器和版本,这可能会有所帮助。

另一种方法是将 aStateMonitorFactory注入MathController, 而不是StateMonitor本身。然后工厂将建造StateMonitor. 所以 MathController 可能看起来像:

public MathController(StateMonitorFactory fact)
{
    _stateMonitor = fact.CreateStateMonitor(RefreshMath);
    _stateMonitor.Monitor();
}

第三种选择是StateMonitor有一个初始化方法。在这种情况下,StateMonitor构造函数将变得无参数,但您将使用类似Start(Action command), 的签名向其添加另一个方法,并MathController负责调用它。

于 2012-12-04T15:36:13.870 回答