этот вопрос Ninject Dependency Injection in MVC3 - Outside of a Controller близок к тому, что я испытываю, но не совсем.HttpContext имеет значение null при вызове Ninject за пределами контроллера MVC3
У меня есть сайт ASP.NET MVC3 с использованием Ninject 3, и он прекрасно работает с инжектором конструктора. Все мои зависимости разрешены, в том числе те, которые проходят в HttpContext.Current.
Моя проблема в том, что в global.asax я запускаю класс TaskManager, который периодически выполняет некоторые задачи по таймеру. Внутри класса TaskManager, у меня нет контроллеров, так что если мне нужен доступ к одному из моих зависимостей (например, моей службы регистрации ошибок), я использую статический класс-оболочку, которая имеет доступ к объекту ядра:
var logger = MyContainer.Get<ILoggingService>();
logger.Error("error doing something...", ex);
Метод .Get просто выполняет вызов kernel.Get, разрешающий мою зависимость. Отлично работает каждый раз, когда я использую этот метод для других моих зависимостей. Однако ILoggingService имеет зависимость MyWebHelper, которая вводится через его конструктор и включает HttpContext в свой конструктор.
public class DefaultLogger : ILoggingService
{
public DefaultLogger(IRepository<Log> logRepository, IWebHelper webHelper)
{
_logRepository = logRepository;
_webHelper = webHelper;
}
}
public class MyWebHelper : IWebHelper
{
public MyWebHelper(HttpContext httpContext)
{
_httpContext = httpContext;
}
}
В остальной части моего веб-сайта, все это прекрасно работает, потому что все зависимости впрыскивают в мои MVC контроллеры. Но что не получается, если я вручную вызову мой статический класс-оболочку, чтобы получить мои зависимости таким образом. Я получаю ошибку:
Error activating HttpContext using binding from HttpContext to method
Provider returned null.
Таким образом, это не дает мне HttpContext, как это делает на протяжении всего моего приложения MVC. Я надеюсь, что это имеет смысл, я не Ninject эксперт, но я пытаюсь ...
Благодарим вас за сообщение! Задачи, которые я выполняю, - это в основном задачи типа очистки и отправка электронной почты, поставленных в очередь. NopCommerce делает что-то очень похожее, и я получил эту идею. Они очень короткие и простые. Я понимаю комментарий о HttpContext. Конечно, это не доступно :) Мой путь вокруг этого состоял в том, чтобы создать еще одну версию ILoggingService, у которой не было введенных зависимостей, включая HttpContext.Current. Было бы здорово, если бы он не просто взорвался, когда обнаружил нулевой HttpContext. – ScottG