4

私のアクション(任意のロジック)を含むクラスがあります:

public class socActions 
{
    public void Choose(int elem) 
    {
        switch(elem) ... CalcA(elem) || CalcB(elem) ...
    }
    public void CalcA() 
    {

    }
    public void CalcB() 
    {

    }
    public void CalcC() 
    {

    }
}

したがって、私のプログラムでは、elem 値を取得すると、次のように使用します。

(new socActions()).Choose(elem_val);

わかりましたが、socActions クラスのメソッドで、自分のリポジトリに接続するか、その他の依存性注入を行いたいと思います。

  1. IRepositoryMy repositoryMy をコンストラクターに追加すると、上記のようにクラスを作成できませんでした。bcz には、引数 IRepositoryMy を持つコンストラクターが必要です。
  2. フィールドに注入しようとすると、機能しません (プロパティ = null)。
  3. メソッド (CalcA、CalcB) でインジェクションを実行しようとしても機能しません。

このタスクを実際にどのように作成する必要がありますか(リポジトリなどのクラスを挿入します)? アプリケーション内のすべてを静的としてマークしたくない:(

WinForms、C#、Ninject 3

編集:

public class socActions
{
    [Inject]
    public IGridProcessor _GridProcessor { private get; set; }

したがって、メソッドではnull:

public void UpdateInfo(...)
{                
    ...
    this._GridProcessor.Refresh();
}

IGridProcessor をコンストラクターのクラスに注入する他のクラスでは、すべて問題ありません。Program.cs で:

    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);

        var kernel = new StandardKernel(new TwttModule());
        var form = kernel.Get<Main>();

        Application.Run(form);
    }

    public class TwttModule : NinjectModule
    {
        public override void Load()
        {
            Bind<IGridProcessor>().To<GridProcessor>();
        }
    }

   public static class AnyClass 
   {
        public static void Act() 
        {
            ....
            (new socActions()).Choose(elem_val);
        }
   }

IGridProcessor を socActions に注入するにはどうすればよいですか?

4

1 に答える 1

0

コンストラクター注入を使用する場合、クラスを直接構築するのではなく、ninject にインスタンスを要求します。ninject の構成方法に基づいて、新しいインスタンスまたはシングルトン インスタンスなどを取得します。

彼らのドキュメントから:

Samurai warrior = kernel.Get<Samurai>();
于 2012-11-20T12:26:19.223 に答える