web-dev-qa-db-fra.com

Résoudre IContainer

Quelle est la méthode suggérée pour obtenir le conteneur Autofac de l'intérieur d'une classe dans l'application? Autofac permet-il de résoudre une propriété IContainer sur une classe ou dois-je stocker le conteneur globalement une fois que je l'ai construit?

62
stimms

Vous aurez besoin de IComponentContext ou ILifetimeScope dans la plupart des cas. Ceux-ci sont automatiquement fournis par Autofac, donc tout ce que vous avez à faire est de prendre une dépendance (constructeur) sur l'un d'eux et l'instance actuelle sera injectée.

Les deux interfaces fournissent les opérations standard de Resolve(), tandis que ILifetimeScope étend IComponentContext en ajoutant des méthodes pour démarrer de nouvelles durées de vie imbriquées.

Les composants qui souhaitent utiliser les services du conteneur pour accéder à d'autres composants doivent le faire dans leur propre portée, plutôt que dans le "global" IContainer, afin que l'instance correcte puisse être retournée. Par exemple. dans une requête HTTP, le IComponentContext ou ILifetimeScope injecté sera celui de la requête en cours.

La plupart des problèmes qui nécessitent un contexte injecté peuvent également être (souvent plus élégamment) surmontés en utilisant des types de relations - voir: http://autofac.readthedocs.org/en/latest/resolve/relationships.html .

100
Nicholas Blumhardt