Dependency Injector
? Dependency Injector
ist ein Dependency-Injection-Framework für Python.
Es hilft bei der Umsetzung des Dependency-Injection-Prinzips.
Hauptmerkmale des Dependency Injector
:
Factory
, Singleton
, Callable
, Coroutine
, Object
, List
, Dict
, Configuration
, Resource
, Dependency
und Selector
Anbieter, die beim Zusammenstellen Ihrer Objekte helfen. Siehe Anbieter.yaml
, ini
und json
Dateien, pydantic
Einstellungen, Umgebungsvariablen und Wörterbüchern. Siehe Konfigurationsanbieter.mypy
-freundlich. Siehe Tippen und Mypy.Cython
. from dependency_injector import containers , providers
from dependency_injector . wiring import Provide , inject
class Container ( containers . DeclarativeContainer ):
config = providers . Configuration ()
api_client = providers . Singleton (
ApiClient ,
api_key = config . api_key ,
timeout = config . timeout ,
)
service = providers . Factory (
Service ,
api_client = api_client ,
)
@ inject
def main ( service : Service = Provide [ Container . service ]) -> None :
...
if __name__ == "__main__" :
container = Container ()
container . config . api_key . from_env ( "API_KEY" , required = True )
container . config . timeout . from_env ( "TIMEOUT" , as_ = int , default = 5 )
container . wire ( modules = [ __name__ ])
main () # <-- dependency is injected automatically
with container . api_client . override ( mock . Mock ()):
main () # <-- overridden dependency is injected automatically
Wenn Sie die Funktion main()
aufrufen, wird die Service
automatisch zusammengestellt und eingefügt.
Wenn Sie Tests durchführen, rufen Sie die Methode container.api_client.override()
auf, um den echten API-Client durch einen Schein zu ersetzen. Wenn Sie main()
aufrufen, wird der Schein eingefügt.
Sie können jeden Anbieter durch einen anderen Anbieter ersetzen.
Es hilft Ihnen auch bei einem Neukonfigurationsprojekt für verschiedene Umgebungen: Ersetzen Sie einen API-Client durch einen Stub auf dem Entwickler oder der Bühne.
Mit dem Dependency Injector
wird die Objektassemblierung in einem Container konsolidiert. Abhängigkeitsinjektionen werden explizit definiert. Dies erleichtert das Verständnis und die Änderung der Funktionsweise einer Anwendung.
Besuchen Sie die Dokumente, um mehr über die Abhängigkeitsinjektion und die Umkehrung der Kontrolle in Python zu erfahren.
Das Paket ist auf dem PyPi verfügbar:
pip install dependency-injector
Die Dokumentation finden Sie hier.
Wählen Sie eine der folgenden Optionen:
Wählen Sie eine der folgenden Optionen:
Das Framework basiert auf dem PEP20-Prinzip (The Zen of Python):
Explicit is better than implicit
Sie müssen explizit angeben, wie die Abhängigkeiten assembliert werden und wo sie eingefügt werden sollen.
Die Stärke des Frameworks liegt in seiner Einfachheit. Dependency Injector
ist ein einfaches Tool für das leistungsstarke Konzept.
Dependency Injector
auf GithubDependency Injector
Dependency Injector
develop