5

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 回呼び出されていることもわかりました。

4

1 に答える 1

0

リクエストの数だけ HttpModule を呼び出します。たとえば、ほとんどの Web ブラウザは、ページ リクエストとファビコン リクエストの少なくとも 2 つのリクエストを送信します。ページに画像のようなものを追加してみて、3 つのリクエストを受け取るかどうかを確認してください...

于 2013-05-09T03:18:20.203 に答える