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ę RegisterTriggerComponentsHttpModule
Init
jest wywoływana dwukrotnie.
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ń. –
Za każdym razem instancja jest tworzona przez Ninject ... StandardProvider.Create – orourkedd
możliwy duplikat metody [HttpModule Init nazywa się kilka razy - dlaczego?] (Http://stackoverflow.com/questions/1140915/httpmodule-init-method- jest nazywany-kilka razy-dlaczego) –