8

J'ai mon projet qui utilise le modèle Repository habituel avec Services et Unit of Work (tous avec Ninject injectant les dépendances d'un NinjectModule), mais j'essaie d'accéder à un service depuis un ActionFilterAttribute pour injecter quelques informations (à partir de DB) dans la mise en page des pages que je montre donc je n'ai pas besoin de jouer avec toutes les actions sur chaque contrôleur.ActionFilterAttribute ninject injection - DbContext a été éliminé

Le problème vient quand je sauverai à DB sur un écran et passer à la suivante, puis revenir à la précédente (avec un @Url.Action standard): Le ActionFilterAttribute pour l'action Index est déclenchée, mais l'appel au service et correspondant référentiel (dans l'attribut) renvoie une exception car le DbContext has been disposed.

Y at-il un problème avec l'accès à un service et, par conséquent, le DbContext d'un ActionFilterAttribute lors de l'injection du service via Property Injection? Je tiens à noter que j'utilise l'injection de propriété pour le service dans l'attribut car le constructeur reçoit 2 paramètres arbitraires en fonction de la signature des méthodes Action, donc ma seule option était d'injecter via la propriété. Faites-moi savoir si vous avez besoin de code et je mettrai à jour la question.

+0

Ajoutez du code s'il vous plaît. –

+0

Contexte de base de données et tous les endroits où son injection doit être liée inrequestscope (ou une portée plus courte) –

Répondre

3

J'ai trouvé la solution à mon problème dans la question suivante: Injecting dependencies into ASP.NET MVC 3 action filters. What's wrong with this approach?

La combinaison 's avec réponse striplingwarrior' Mark Seeman commentaire de a été la solution. Fondamentalement, j'ai divisé mon ActionFilterAttribute en un attribut qui a simplement décoré mes actions et conserve les paramètres dont j'ai besoin pour plus tard, et aussi dans un ActionFilter qui vérifie les attributs personnalisés de l'action et si mon attribut existe, il injecte les données que je voulais de la DB dans le ViewBag. Tout est ensuite lié à l'extension BindFilter de Ninject, de sorte qu'il ne s'applique qu'aux méthodes dont il a besoin.

Questions connexes