Я использую Ninject в приложении MVC3.
Одна из моих разрешаемых зависимостей использует HttpContext.Current.Server.MapPath("~/App_Data")
Назад, когда я инициализировал контейнер IoC в Global.asax (Application_Start), я смог просто определить в конфигурации моего модуля:
.WithConstructorArgument("basePath", HttpContext.Current.Server.MapPath("~/App_Data"));
Поскольку мой модуль инициализировался из того же потока, что и приложение, HttContext.Current
не был нулевым.
Затем мне пришлось перенести инициализацию внедрения зависимостей в метод PreAppStart, используя WebActivator
. Так как HttContext еще не доступен в этом сценарии, мне пришлось удалить инициализацию параметров моего dep.
Я обошел проблему, решив HttpContext
внутри экземпляра класса во время выполнения. Но оказывается, что это было возможно только до тех пор, пока экземпляр вызывался из потока запроса. Как только я переместил вызов разрешенного экземпляра в отдельный поток (чтобы не останавливать генерацию контроллеров ActionResult
), я пришел к той же проблеме - больше не мог получить HttpContext
. Как я могу решить это в моем сценарии?
P.S. Только что понял, что я все еще могу просто вызвать метод моей зависимости от запуска приложения Global.asax и передать оттуда HttpContext
. Тем не менее, дайте мне знать, что является лучшим способом сделать это.