У меня есть установка Ninject, которая создает преобразователь JobContext InRequestScope()
Это работает отлично, однако у меня есть очень специфический вызов на Веб-сайте, который требует от меня прокрутки несколько баз данных (все данные в базах данных по годам). Я не мог понять, что происходит, потому что я забыл, что JobContext был InRequestScope
, но последний блок кода был не, как я думал, что это должно произойти.Имея как InRequestScope, так и InTransientScope для Ninject, разрешающие один и тот же тип
Вот установка
//Ninject module
Bind<Data.IJobContext>().To<Data.JobContext>().InRequestScope();
//Controller's Initialize
protected override void Initialize(System.Web.Routing.RequestContext requestContext) {
base.Initialize(requestContext);
//set a connection string for the jobContext
this.jobContext = DependencyResolver.Current.GetService<IJobContext>();
jobContext.SetYear(currentYear);
}
Поскольку JobContext находится в области действия запроса он держит повторно использовать один и тот же объект, на каждый год. Это единственный случай, когда мне нужно, чтобы он был InTransientScope
, а не InRequestScope
.
//Special function
foreach (int year in ActiveYears) {
jobContext = DependencyResolver.Current.GetService<IJobContext>();
jobContext.SetYear(year);
DoSomething();
}
Как это сделать?
Ну, почти на каждой странице это необходимо только для конкретного года. За исключением одного звонка, где мне нужно перечислить все записи в каждой из баз данных. Я не знал о «Именованном». Хотя мне это не нравится, это действительно работает. Я попытался выяснить другой способ сделать это, но я в недоумении. :) – Buildstarted
Я использую инъекцию зависимостей всюду, кроме этого одного места, btw :) – Buildstarted
Если вы используете InRequestScope и происходит ошибка проверки Db, вы не сможете сохранить его в своей базе данных с контекстом области запроса. В этом случае вы хотите, чтобы временная область сохраняла это конкретное исключение в вашей базе данных. Этот пост дает большую информацию: http://stackoverflow.com/questions/26775080/how-to-handle-async-calls-with-ninject-inrequestscope – jsgoupil