Per qualche motivo, Ninject sta creando un'istanza aggiuntiva del mio oggetto quando utilizzo NinjectHttpModule
nella mia app MVC 4.Ninject Creazione di un'istanza extra quando si utilizza NinjectHttpModule
Se utilizzo NinjectHttpModule
(l'impostazione predefinita di Ninject.MVC3) ma in realtà non ho alcuna classe IHttpModule
che richiede l'iniezione del costruttore, funziona correttamente. Ma non appena creo una classe che implementa IHttpModule
e che richiede l'iniezione del costruttore, Ninject per qualche ragione crea due istanze del mio oggetto.
Ho aggiunto un codice di monitoraggio alla classe che viene duplicata per verificare che fosse in corso di duplicazione. Ogni volta che viene creata un'istanza, la variabile conteggio statica viene incrementato:
namespace Trigger.Events
{
public class TriggerEventRegistry : ITriggerRegistry
{
private static int count;
public TriggerEventRegistry()
{
TriggerEventRegistry.count++;
}
}
}
Ecco il mio IHttpModule
:
namespace TriggerDevelopment.ApplicationTriggers
{
public class RegisterTriggerComponentsHttpModule : IHttpModule
{
ITriggerEventRegistry eventRegistry;
public RegisterTriggerComponentsHttpModule(ITriggerEventRegistry eventRegistry)
{
this.eventRegistry = eventRegistry;
}
}
....
}
Nel momento in TriggerEventRegistry
viene iniettato mio controller (nella stessa richiesta), il TriggerEventRegistry.count
è uguale a 2
. Se commento il costruttore su RegisterTriggerComponentsHttpModule
, il valore di TriggerEventRegistry.count
equivale a 1
(che è consigliabile poiché dovrebbe esserci solo un'istanza/richiesta).
Ecco il codice vincolante:
Bind<ITriggerEventRegistry>().To<TriggerEventRegistry>().InRequestScope();
Qualsiasi aiuto su questo sarebbe molto apprezzato!
Nota
Ho anche fatto una richiesta per la mia applicazione usando curl per evitare molteplici richieste HTTP stati fatti dal browser alla ricerca di attività, una favicon o qualcosa di simile. Ancora nessuna gioia.
Aggiornamento
Con ulteriori indagini, che sto vedendo anche che il ctor e il metodo di RegisterTriggerComponentsHttpModule
Init
viene chiamato due volte.
Inserisci un punto di interruzione su questa riga: "TriggerEventRegistry.count ++;" e verifica l'aspetto del callstack e che è Ninject responsabile per entrambe le istanze. –
Entrambe le volte l'istanza viene creata da Ninject ... StandardProvider.Create – orourkedd
possibile duplicato di [Il metodo HttpModule Init viene chiamato più volte - perché?] (Http://stackoverflow.com/questions/1140915/httpmodule-init-method- is-called-several-times-why) –