2011-09-28 24 views
5

Sono sicuro che questa è una domanda stupida, come io parto dal presupposto che la risposta è "Quando l'oggetto è istanziare da Ninject" ... ma io voglio ricontrollare ...Quando viene attivato OnActivation di Ninject?

Per dare un po 'di più come contesto al perché sto facendo la domanda, ho un'app mvc asp che implementa NinjectHttpApplication. Tuttavia, all'interno della sovrascrittura OnApplicationStarted ho bisogno di attivare un metodo su un'istanza singleton associata a Ninject.

Il problema è che il Kernel è esposto ma non dovrebbe essere usato come localizzatore di servizi, quindi potrei recuperare l'oggetto da questo e chiamare DoSomeSetup(); metodo, ma sembra un fallimento. Per quanto ne so, l'istanza di NinjectHttpApplication non è DI'd in quanto il file Global.asax lo utilizza direttamente, quindi non potrei immetterlo nell'applicazione in quel modo.

Questo mi lascia con un'altra opzione che sarebbe quella di aggiungere OnActivation (x => x.DoSomeSetup()); chiama al bind, tuttavia questo oggetto è usato solo in determinati posti, quindi non è come la prima volta che carichi una pagina che sarebbe richiesta dal controller, quindi se OnActivation attende che la prima istanza venga creata, potrebbe non accadere per un po.

thats non spera troppo confuso :)

risposta

2

Sì vostra asumption è corretta (o almeno in gran parte corretto). Le azioni di attivazione vengono eseguite la prima volta che un'istanza viene risolta anche se non creata da Ninject (ad esempio costanti)

Per HttpApplication è possibile utilizzare l'iniezione di proprietà a proposito.

+0

Potrebbe fornire un rapido esempio di proprietà di iniezione in NinjectHttpApplication? Solo per assicurarmi di aver capito bene. – Grofit

+0

Aggiungi una proprietà pubblica con un setter e aggiungi l'attributo [Inject] ad esso. –

Problemi correlati