2013-03-30 13 views
5

Z jakiegoś powodu Ninject tworzy dodatkową instancję mojego obiektu, gdy używam NinjectHttpModule w mojej aplikacji MVC 4.Ninject Tworzenie dodatkowej instancji przy użyciu NinjectHttpModule

Jeśli używam NinjectHttpModule (domyślnie Ninject.MVC3), ale w rzeczywistości nie mam żadnych klas IHttpModule, które wymagają wstrzyknięcia konstruktora, działa dobrze. Ale gdy tylko utworzę klasę, która implementuje IHttpModule i która wymaga iniekcji konstruktora, Ninject z jakiegoś powodu tworzy dwa wystąpienia mojego obiektu.

Dodałem kod śledzenia do klasy, która jest powielana w celu sprawdzenia, czy została ona powielona. Za każdym razem, gdy instancja jest tworzona zmienna licznik statyczny jest zwiększany:

namespace Trigger.Events 
{ 
    public class TriggerEventRegistry : ITriggerRegistry 
    { 
     private static int count; 

     public TriggerEventRegistry() 
     { 
      TriggerEventRegistry.count++; 
     } 
    } 
} 

Oto moja IHttpModule:

namespace TriggerDevelopment.ApplicationTriggers 
{ 
    public class RegisterTriggerComponentsHttpModule : IHttpModule 
    { 
     ITriggerEventRegistry eventRegistry; 

     public RegisterTriggerComponentsHttpModule(ITriggerEventRegistry eventRegistry) 
     { 
      this.eventRegistry = eventRegistry; 
     } 
    } 
    .... 
} 

Do czasu TriggerEventRegistry jest wtryskiwany do mojego kontrolera (na tym samym życzenie), TriggerEventRegistry.count jest równy 2. Jeśli komentuję konstruktora na RegisterTriggerComponentsHttpModule, to wartość TriggerEventRegistry.count jest równa 1 (co powinno być, ponieważ powinna istnieć tylko jedna instancja/żądanie).

Oto kod oprawa:

Bind<ITriggerEventRegistry>().To<TriggerEventRegistry>().InRequestScope(); 

Każda pomoc w tej sprawie byłoby bardzo mile widziane!

Uwaga

nawet złożyło wniosek do mojej aplikacji za pomocą curl aby uniknąć wielokrotnych żądań HTTP podejmowane przez przeglądarkę szuka aktywów, favicon czy coś takiego. Wciąż nie ma radości.

Aktualizacja

Po dalszych badaniach, ja też widząc, że konstruktor i metodę RegisterTriggerComponentsHttpModuleInit jest wywoływana dwukrotnie.

+1

Dodaj punkt przerwania w tym wierszu: 'TriggerEventRegistry.count ++;' i sprawdź, jak wygląda wyskakujący dzwonek i czy jest to Ninject, który jest odpowiedzialny dla obu wystąpień. –

+0

Za każdym razem instancja jest tworzona przez Ninject ... StandardProvider.Create – orourkedd

+0

możliwy duplikat metody [HttpModule Init nazywa się kilka razy - dlaczego?] (Http://stackoverflow.com/questions/1140915/httpmodule-init-method- jest nazywany-kilka razy-dlaczego) –

Odpowiedz

0

Będzie on wywoływał twój HttpModule tyle razy, ile jest żądań. Na przykład, większość przeglądarek przesyła co najmniej dwa żądania, żądanie strony i prośbę favicon. Spróbuj dodać do strony coś podobnego do obrazu i sprawdź, czy otrzymujesz trzy żądania ...

Powiązane problemy