Recentemente, ho aggiornato uno dei miei progetti MVC3 da Ninject 2 a 3. NinjectNinject 3 InRequestScope non restituendo la stessa istanza per la stessa richiesta
Dopo un paio di minuti cercando di trovare il motivo per cui InRequestScope non era più disponibile, Ho scoperto che questa è ora un'estensione di Ninject.Web.Common.
Ora, quando provo a eseguire l'applicazione, Ninject funziona come se tutti i tipi fossero associati con un ambito InRequest sarebbe InTransientScope; una nuova istanza è stata creata ogni volta.
Nella mia classe che eredita da NinjectModule, ho un binding semplice come quella:
Bind<ViewModel.Activity>().ToSelf().InRequestScope();
Nel mio controller, ho 2 proprietà del tipo ViewModel.Activity marcati con l'attributo Ninject.
[Inject]
public ViewModel.Activity Activity { get; set; }
[Inject]
public ViewModel.Activity Activity1 { get; set; }
Se guardavo in modalità debug il valore della HashCode di entrambe le due proprietà, non tutti hanno valore diverso ma HttpContext è lo stesso; Sono nella stessa richiesta.
Cosa mi è mancato su come utilizzare correttamente il nuovo Ninject.Web.Common.InRequestScope con la nuova versione di Ninject 3?
Grazie mille.
Come stai agganciare Ninject nel tuo codice? Stai usando Ninject.MVC3 da nuget e poi modificando il file NinjectWebCommon.cs? o stai facendo una fabbrica di controller personalizzati? –
Una fabbrica personalizzata – Samuel
@MystereMan Grazie mille. Questo è esattamente quello che voglio. Ho usato NuGet per trovare Ninject MVC3 e aggiungo semplicemente quello che hai detto in NinjectWebCommon per il binding delle mie dipendenze e funziona. Penso che la chiave del perché questo lavoro sia dovuto a queste linee: DynamicModuleUtility.RegisterModule (typeof (OnePerRequestHttpModule)); e DynamicModuleUtility.RegisterModule (typeof (NinjectHttpModule)); OnePerRequestHttpModule disporrà immediatamente tutta la mia unità di lavoro dopo ogni richiesta. Grazie mille! – Samuel