#ninject
#ninject
Вопрос:
Я уверен, что это глупый вопрос, поскольку я предполагаю, что ответ будет «Когда объект создается с помощью Ninject»… Но я хочу перепроверить…
Чтобы дать немного больше контекста относительно того, почему я задаю вопрос, у меня есть приложение asp mvc, которое реализует NinjectHttpApplication
. Однако в рамках OnApplicationStarted
переопределения мне нужно активировать метод для одноэлементного экземпляра, который привязан к Ninject.
Проблема в том, что ядро открыто, но не должно использоваться в качестве локатора служб, поэтому я мог бы получить объект обратно из него и вызвать DoSomeSetup();
метод, но это похоже на сбой. Насколько мне известно NinjectHttpApplication
, экземпляр не DI’d, поскольку глобальный файл.asax использует его напрямую, поэтому я не мог ввести его в приложение таким образом.
Это оставляет мне еще один вариант, который заключается в добавлении OnActivation(x=>x.DoSomeSetup());
вызова к привязке, однако этот объект используется только в определенных местах, так что это не похоже на то, что при первой загрузке страницы это потребуется контроллеру, поэтому, если OnActivation
он ожидает создания первого экземпляра, он можетнекоторое время этого не происходит.
Надеюсь, это не слишком сбивает с толку 🙂
Ответ №1:
Да, ваше предположение правильное (или, по крайней мере, в основном правильное). Действия активации выполняются при первом разрешении экземпляра, даже если он не создан Ninject (например, константы)
Кстати, для HttpApplication вы можете использовать внедрение свойств.
Комментарии:
1. Не могли бы вы привести краткий пример внедрения свойств в приложение NinjectHttpApplication? Просто чтобы убедиться, что я вас правильно понял.
2. Добавьте общедоступное свойство с параметром setter и добавьте к нему атрибут [Inject].