Dependency Injector
? Dependency Injector
adalah kerangka injeksi ketergantungan untuk Python.
Ini membantu menerapkan prinsip injeksi ketergantungan.
Fitur utama dari Dependency Injector
:
Factory
, Singleton
, Callable
, Coroutine
, Object
, List
, Dict
, Configuration
, Resource
, Dependency
, dan Selector
yang membantu merakit objek Anda. Lihat Penyedia.yaml
, ini
, dan json
, pengaturan pydantic
, variabel lingkungan, dan kamus. Lihat Penyedia konfigurasi.mypy
. Lihat Mengetik dan 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
Saat Anda memanggil fungsi main()
, ketergantungan Service
dirakit dan disuntikkan secara otomatis.
Saat Anda melakukan pengujian, Anda memanggil metode container.api_client.override()
untuk mengganti klien API asli dengan tiruan. Saat Anda memanggil main()
, tiruannya dimasukkan.
Anda dapat mengganti penyedia mana pun dengan penyedia lain.
Ini juga membantu Anda dalam mengonfigurasi ulang proyek untuk lingkungan yang berbeda: mengganti klien API dengan stub di dev atau stage.
Dengan Dependency Injector
, perakitan objek dikonsolidasikan dalam sebuah wadah. Injeksi ketergantungan didefinisikan secara eksplisit. Hal ini memudahkan untuk memahami dan mengubah cara kerja aplikasi.
Kunjungi dokumen untuk mengetahui lebih banyak tentang injeksi Ketergantungan dan inversi kontrol dengan Python.
Paket tersedia di PyPi:
pip instal injektor ketergantungan
Dokumentasi tersedia di sini.
Pilih salah satu dari berikut ini:
Pilih salah satu dari berikut ini:
Kerangka kerja ini didasarkan pada prinsip PEP20 (The Zen of Python):
Explicit is better than implicit
Anda perlu menentukan cara merakit dan di mana memasukkan dependensi secara eksplisit.
Kekuatan kerangka ini terletak pada kesederhanaannya. Dependency Injector
adalah alat sederhana untuk konsep yang kuat.
Dependency Injector
di GithubDependency Injector
Dependency Injector
develop