2016-12-12 1 views
0

初めてサービスを呼び出すとすべて正常に動作します。その後、私はこのエラーを受け取ります: "NinjectコンポーネントICacheの読み込み中にエラーが発生しました。\ r \ nそのようなコンポーネントはカーネルのコンポーネントコンテナに登録されていません。「NinjectコンポーネントICacheの読み込み中にエラーが発生しました」というメッセージが2回目に表示されます

私が呼び出すコントローラはIKernelをコンストラクタのパラメータとして持っています。これは問題であることを

私は私のサービスにカーネルオブジェクトを渡すことが出来るのですか

私のコントローラのコンストラクタ:。?私のGlobal.asaxファイルの

public MyController(IKernel diContainer) 
    { 
     _diContainer = diContainer; 
    } 

パート:

var kernel = NinjectWebApi.Kernel; 

kernel.Bind<IMyController().To<MyController(); 

//Set the dependency resolver to use ninject 
GlobalConfiguration.Configuration.DependencyResolver = new NinjectDependencyResolver(kernel); 

私はNinject 3.2を使用しています。

サービスにカーネルを渡していない私の他のサービスでは、このアプローチはうまくいきます。

+0

NinjectDependencyResolverを手動で書き込んだり、準備ができていますか? –

+0

NinjectDependencyResolverがデフォルトのオブジェクトではないことに気付きました。これは私の同僚が作ったものです。その名前は私に、それが鼻水から来ていると思うようにしました。これは調査する価値があるかもしれません。 – jimmy

答えて

2

NinjectDependenvyResolver Disposeメソッドの内部にコンテナを配置しているようです。

+0

コントローラーが廃棄されると、私のカーネルも廃棄されるということですか? – jimmy

+1

ほぼ正しい。 NinjectDependenvyResolverが破棄されているときに破棄しています。ですから、 'Dispose'メソッドから' container.Dispose() 'を取り除くだけです。それはそれです。 –

+0

これを行う際に危険性はありますか?私のウェブサーバは、デッドカーネルオブジェクトが山積しないだろうと推測しています。 – jimmy

関連する問題