NinjectHttpModuleMVC 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.countequals 2. のコンストラクターをコメントアウトすると、 equalsRegisterTriggerComponentsHttpModuleの値が返されます(インスタンス/リクエストは 1 つしかないため、これは必要です)。TriggerEventRegistry.count1
バインディング コードは次のとおりです。
Bind<ITriggerEventRegistry>().To<TriggerEventRegistry>().InRequestScope();
これに関する助けがあれば大歓迎です!
ノート
アセット、ファビコンなどを探しているブラウザーによって複数の HTTP 要求が行われるのを避けるために、curl を使用してアプリに要求を行いました。まだ喜びはありません。
アップデート
さらに調査すると、ctor とInitメソッドがRegisterTriggerComponentsHttpModule2 回呼び出されていることもわかりました。