NinjectHttpModule
MVC 4 アプリで使用すると、何らかの理由で Ninject がオブジェクトの追加インスタンスを作成しています。
(Ninject.MVC3 のデフォルト)を使用NinjectHttpModule
しても、実際にはIHttpModule
コンストラクター インジェクションを必要とするクラスがない場合、問題なく動作します。しかし、コンストラクター注入を必要とする実装クラスを作成するとすぐにIHttpModule
、何らかの理由で Ninject がオブジェクトの 2 つのインスタンスを作成します。
複製されていることを確認するために、複製されているクラスに追跡コードを追加しました。インスタンスが作成されるたびに、静的カウント変数がインクリメントされます。
namespace Trigger.Events
{
public class TriggerEventRegistry : ITriggerRegistry
{
private static int count;
public TriggerEventRegistry()
{
TriggerEventRegistry.count++;
}
}
}
これが私のものIHttpModule
です:
namespace TriggerDevelopment.ApplicationTriggers
{
public class RegisterTriggerComponentsHttpModule : IHttpModule
{
ITriggerEventRegistry eventRegistry;
public RegisterTriggerComponentsHttpModule(ITriggerEventRegistry eventRegistry)
{
this.eventRegistry = eventRegistry;
}
}
....
}
aTriggerEventRegistry
がコントローラーに (同じリクエストで) 注入されるまでに、TriggerEventRegistry.count
equals 2
. のコンストラクターをコメントアウトすると、 equalsRegisterTriggerComponentsHttpModule
の値が返されます(インスタンス/リクエストは 1 つしかないため、これは必要です)。TriggerEventRegistry.count
1
バインディング コードは次のとおりです。
Bind<ITriggerEventRegistry>().To<TriggerEventRegistry>().InRequestScope();
これに関する助けがあれば大歓迎です!
ノート
アセット、ファビコンなどを探しているブラウザーによって複数の HTTP 要求が行われるのを避けるために、curl を使用してアプリに要求を行いました。まだ喜びはありません。
アップデート
さらに調査すると、ctor とInit
メソッドがRegisterTriggerComponentsHttpModule
2 回呼び出されていることもわかりました。