Accès global au résolveur de dépendance autofac dans ASP.NET MVC3?
Je suis en utilisant Autofac avec ASP.NET MVC de l'intégration, de tous mes contrôleurs de recevoir des dépendances et de l'Autofac résout imbriquée automatiquement les dépendances. Grand il fonctionne
Mais comment puis-je résoudre une dépendance en dehors de la portée de contrôleur de l'instanciation? Dans certains endroits, au fond de mon code, j'ai besoin de demander la résolution de mon Enregistreur. D'une part, il semble mal à passer le journal comme une dépendance en baisse à chaque petit objet que j'ai créer, et de l'autre il semble mal à dépendre de la résolution de dépendances si profond dans mon code
Par exemple, j'ai une classe appelée Résultat qui est retourné par de nombreuses actions. C'est une constante utilisée objet que mon code de l'application peut compter sur le retour de couches plus profondes. Quand les plus profondes couches de code ajoute une INTERFACE utilisateur d'erreur à cet objet que je veux ajouter automatiquement à l'enregistreur, qui a besoin de se résoudre. Avoir chaque classe de prendre une dépendance sur enregistreur serait juste dans la façon
Toute aide appréciée merci
source d'informationauteur Typo Johnson | 2011-04-25
Vous devez vous connecter pour publier un commentaire.
Eh bien, vous pouvez utiliser le concours complet (pub/sub approche) si la dépendance dans tous les objets qui vous irrite, mais je n'ai pas de chose il n'y a rien de mal avec la dépendance dans le centre de l'Enregistreur de résolution.
Si vous avez vraiment besoin de vous connecter à partir de chaque classe puis vous cetrtainly pouvez approcher l'enregistrement de manière très aspect de base de votre application et vous mentalement l'approche comme d'autres communes de la bibliothèque de types, comme la Chaîne ou de services de renseignements qui sont omniprésents et coffre-fort de dépendre.
Mais je vous suggère quelque chose d'autre. À mon humble avis, vous devriez rething de l'architecture et de ne pas vous connecter chaque classe. Si votre enregistrement est uniquement (ou principalement) sur l'écriture des erreurs (exceptions) alors ne polute votre modèle de domaine. Permet de placer dans la couche de Service insteád. Ce type d'orchestration de couche peut évaluer correctement chaque attrapé exception journaux et seulement ce qui est nécessaire. Laissez la bulle de ces exceptions à la plus faible possible religieuse à la trace de la pile et de les gérer en tant que dernière chose très.
La chose que vous cherchez est MVC est
DependencyResolver.Current
:À L'Aide De DependencyResolver.Actuelle est sans aucun doute un moyen de résoudre votre problème en ASP .NET MVC, vu que c'est un cadre de la fonction. Cependant, je voudrais d'abord essayer de suivre la recommandation suivante à partir de la Section "bonnes Pratiques" de l'Autofac Wiki
"Donnant des composants d'accès au conteneur, de le stocker dans un public statique de la propriété ou de prise de fonctions comme la Résolution() disponible sur mondial " Cio " classe de défaites le but d'utiliser l'injection de dépendance. Ces modèles ont plus en commun avec le Service de patron de localisation.
Si les composants ont une dépendance sur le conteneur, regardez comment ils utilisent le récipient pour récupérer des services, et ajouter ces services du composant (dependency injection) arguments du constructeur à la place.
Utilisation des types de relations pour les composants qui ont besoin d'instancier les autres composants ou d'interagir avec le conteneur de moyens plus avancés."
Seulement si pas possible de reformuler une dépendance comme suggéré ci-dessus, puis-je utiliser la DependencyResolver.
Personnes à la recherche d'une autre solution à ce problème pourrait avoir un coup d'oeil à cet autre DONC réponse qui tire parti de
IComponentContext
service de résolution injecté directement par Autofac.