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?
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 .