0

コンストラクターが呼び出される前にプロパティを注入する IoC コンテナーを知っている人はいますか?

私は、基本クラスを使用するために複数のパラメーターを持つコンストラクターから人々に派生させることを強制したくない社内フレームワークに取り組んでいます (スケジューラーなどのような退屈なものであり、ベースにさらに追加すると、ベースを使用している全員のコードを更新するという大きな仕事です)。これらのプロパティに依存する初期化を完了することができる別の OnInitialized 仮想メソッドを使用する必要がないように、ユーザー コンストラクターが呼び出される前にそれらを設定することが望ましいでしょう。

編集

明確にするために、ここで私が望んでいるのは、プロパティ注入が構築チェーンのフィールド初期化子と同等になることです。

  1. 派生静的フィールド
  2. 派生静的コンストラクター
  3. 派生インスタンス フィールド
  4. 基本静的フィールド
  5. 基本静的コンストラクター
  6. ベース インスタンス フィールド
  7. 基本インスタンス コンストラクター
  8. 派生インスタンス コンストラクター

つまり、約 6.5 または多分 7.5 です (ただし、それは少し奇妙です)。

4

1 に答える 1

0

質問に対するコメントによると、これは私のニーズに対応しているように見えるパターンですが、この例にあるサービスロケーターを回避するために TLS を使用する必要があります (この方法で設定されているプロパティのスコープを制御する必要があります)。

public class TestBase
{
    private SchedulerContext schedulerContext = InitScheduler();
    public SchedulerContext SchedulerContext
    {
        get { return this.schedulerContext; }
    }

    private static SchedulerContext InitScheduler()
    {
        return ServiceLocator.Current.GetInstance<SchedulerContext>();
    }

    public TestBase()
    {
        Console.WriteLine("Is Instantiated: {0}", this.SchedulerContext != null);           
    }
}

public class TestDerived : TestBase
{
    public TestDerived()
    {
        Console.WriteLine("Is Instantiated: {0}", this.SchedulerContext != null);
    }
}

これにより、少なくとも言語オブジェクト構築フレームワークを分解する恐怖を回避できます:)

于 2013-03-07T20:28:36.343 に答える