1

Math コンポーネントを更新する方法を知っているクラス (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コンテナとバージョンを言っておくと役立つかもしれません。

別の方法は、それ自体ではなく、にを注入するStateMonitorFactoryことです。次に、ファクトリはを構築します。したがって、MathControllerは次のようになります。MathControllerStateMonitorStateMonitor

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

3番目のオプションはStateMonitor、初期化メソッドを使用することです。その場合、StateMonitorコンストラクターはパラメーターなしになりますが、のような署名を使用してコンストラクターに別のメソッドを追加し、それStart(Action command)MathController呼び出す責任があります。

于 2012-12-04T15:36:13.870 に答える