J'ai une configuration Ninject qui crée un résolveur JobContext InRequestScope()
Cela fonctionne très bien, cependant, j'ai un appel très spécifique dans le site Web qui me demande de faire une boucle quelques bases de données (toutes les données dans les bases de données par année). Je ne pouvais pas vraiment comprendre ce qui se passait parce que j'avais oublié que le JobContext était InRequestScope
mais le dernier bloc de code était pas agissant comme je le pensais.Avoir un InRequestScope et InTransientScope pour Ninject résolvant le même type
Voici la configuration
//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);
}
Depuis JobContext est portée à la demande, il conserve réutilisant le même objet pour chaque année. C'est le seul cas où j'ai besoin que ce soit InTransientScope
plutôt que .
//Special function
foreach (int year in ActiveYears) {
jobContext = DependencyResolver.Current.GetService<IJobContext>();
jobContext.SetYear(year);
DoSomething();
}
Comment puis-je accomplir cela?
Eh bien, sur presque toutes les pages, il est seulement nécessaire pour l'année en question. Sauf en un seul appel où j'ai besoin de lister tous les enregistrements dans chacune des bases de données. Je n'étais pas au courant de 'Named'. Bien que je n'aime pas ça, ça marche. J'ai essayé de trouver une autre façon de le faire, mais je suis à perte. :) – Buildstarted
J'utilise l'injection de dépendances partout excepté cet emplacement, btw :) – Buildstarted
Si vous utilisez InRequestScope et qu'une erreur de validation de Db se produit, vous ne pourrez pas l'enregistrer dans votre base de données avec un contexte de portée de requête. Dans ce cas, vous souhaitez qu'une portée transitoire enregistre cette exception spécifique dans votre base de données. Cet article donne beaucoup d'infos: http://stackoverflow.com/questions/26775080/how-to-handle-async-calls-with-ninject-inrequestscope – jsgoupil