2011-09-28 13 views
5

Jestem pewien, że to jest głupie pytanie, ponieważ zakładam, że odpowiedź brzmi "Kiedy przedmiot jest wprowadzony przez Ninject" ... ale chcę dwukrotnie sprawdzić ...Kiedy wyłączy się aktywacja programu Ninject?

Aby podać nieco więcej kontekstu jako dlaczego zadaję pytanie, mam aplikację asp mvc, która implementuje NinjectHttpApplication. Jednak w przypadku nadpisania OnApplicationStarted muszę aktywować metodę na instancji singleton, która jest powiązana z programem Ninject.

Problem polega na tym, że jądro jest odsłonięte, ale nie powinno być używane jako lokalizator usług, więc mógłbym odzyskać obiekt i wywołać DoSomeSetup(); metoda, ale to wygląda na porażkę. Zgodnie z moją wiedzą instancja NinjectHttpApplication nie jest DI'd, ponieważ plik Global.asax używa go bezpośrednio, więc nie mogłem go przekierować do aplikacji w ten sposób.

To pozostawia mi jeszcze jedną opcję, która polegałaby na dodaniu funkcji OnActivation (x => x.DoSomeSetup()); wywołanie wiązania, jednak ten obiekt jest używany tylko w niektórych miejscach, więc nie jest taki, jak przy pierwszym ładowaniu strony, który byłby wymagany przez kontroler, więc jeśli OnActivation czeka na utworzenie pierwszej instancji, może się to nie zdarzyć dla chwila.

Mam nadzieję, że nie to jest to zbyt skomplikowane :)

Odpowiedz

2

Tak swoją asumption jest poprawna (a przynajmniej w większości poprawne). Akcje aktywacyjne są uruchamiane za pierwszym razem, gdy instancja jest rozwiązywana, nawet jeśli nie została utworzona przez Ninject (np. Constants).

W przypadku HttpApplication można użyć wtrysku właściwości przy okazji.

+0

Czy możesz podać szybki przykład wtrysku własności do aplikacji NinjectHttpApplication? Aby upewnić się, że rozumiem cię poprawnie. – Grofit

+0

Dodaj właściwość publiczną z ustawiaczem i dodaj do niej atrybut [Inject]. –

Powiązane problemy