0

私のglobal.asaxファイルには、インターフェイスとクラスの間に依存関係が設定されています。インジェクションは常に機能し、セットアップに問題はありません。

モデル バインダーでは、同じソリューションで、そのインターフェイスにマップされた具象クラスを取得しようとしています。

IKernel kernel = new StandardKernel();
var samurai = kernel.Get<Samurai>();

なんらかの理由でこれが機能せず、「オブジェクトの初期化が null です」などのエラーが表示されます。私が理解しているように、私が作成したこのカーネルは、global.asax で作成されたオブジェクトにリンクされていない新しいオブジェクトであるため、これは理にかなっています。global.asax で取得するにはどうすればよいですか、それとも何か間違っていますか?

4

1 に答える 1

1

global.asax.cs では、このような状況のために静的変数を使用しました。

protected override IKernel CreateKernel()
{
    return NinjectKernel;    
}

static IKernel _kernel;
public static IKernel NinjectKernel
{
  get
  {
      if (_kernel == null)
      {
         _kernel = new StandardKernel();
         //Configured bindings for interfaces and classes
      }
      return _kernel;
   }
}

そして、インターフェイスへの参照、つまり実際のオブジェクト Samurai への参照を与える ISamurai への参照を取得しようとしていると思います。

var samurai = NinjectKernel.Get<ISamurai>()
于 2012-10-31T17:30:14.430 に答える