Dependency Injector
คืออะไร? Dependency Injector
เป็นเฟรมเวิร์กการฉีดการพึ่งพาสำหรับ Python
ช่วยนำหลักการฉีดพึ่งพามาใช้
คุณสมบัติที่สำคัญของ Dependency Injector
:
Factory
, Singleton
, Callable
, Coroutine
, Object
, List
, Dict
, Configuration
, Resource
, Dependency
และ Selector
ที่ช่วยรวบรวมวัตถุของคุณ ดูผู้ให้บริการyaml
, ini
และ json
การตั้งค่า pydantic
ตัวแปรสภาพแวดล้อม และพจนานุกรม ดูผู้ให้บริการการกำหนดค่าmypy
เป็นมิตร ดูการพิมพ์และ mypyCython
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
เมื่อคุณเรียกใช้ฟังก์ชัน main()
การพึ่งพา Service
จะถูกประกอบและฉีดเข้าไปโดยอัตโนมัติ
เมื่อคุณทำการทดสอบ คุณจะเรียกใช้เมธอด container.api_client.override()
เพื่อแทนที่ไคลเอ็นต์ API จริงด้วยการจำลอง เมื่อคุณโทร main()
การเยาะเย้ยจะถูกฉีดเข้าไป
คุณสามารถแทนที่ผู้ให้บริการรายใดรายหนึ่งกับผู้ให้บริการรายอื่นได้
นอกจากนี้ยังช่วยคุณในการกำหนดค่าโปรเจ็กต์ใหม่สำหรับสภาพแวดล้อมที่แตกต่างกัน: แทนที่ไคลเอนต์ API ด้วย stub บน dev หรือสเตจ
ด้วย Dependency Injector
การประกอบวัตถุจะถูกรวมไว้ในคอนเทนเนอร์ การฉีดการพึ่งพาถูกกำหนดไว้อย่างชัดเจน ทำให้ง่ายต่อการเข้าใจและเปลี่ยนแปลงวิธีการทำงานของแอปพลิเคชัน
ไปที่เอกสารเพื่อทราบข้อมูลเพิ่มเติมเกี่ยวกับการพึ่งพาการฉีดและการผกผันของการควบคุมใน Python
แพ็คเกจนี้มีอยู่ใน PyPi:
pip ติดตั้งหัวฉีดพึ่งพา
เอกสารมีอยู่ที่นี่
เลือกอย่างใดอย่างหนึ่งต่อไปนี้:
เลือกอย่างใดอย่างหนึ่งต่อไปนี้:
กรอบการทำงานนี้ตั้งอยู่บนหลักการ PEP20 (The Zen of Python):
Explicit is better than implicit
คุณต้องระบุวิธีการประกอบและตำแหน่งที่จะแทรกการขึ้นต่อกันอย่างชัดเจน
พลังของกรอบการทำงานอยู่ที่ความเรียบง่าย Dependency Injector
เป็นเครื่องมือง่ายๆ สำหรับแนวคิดอันทรงพลัง
Dependency Injector
บน GithubDependency Injector
Dependency Injector
develop