Dependency Injector
؟ Dependency Injector
هو إطار عمل لحقن التبعية لـ Python.
يساعد في تنفيذ مبدأ حقن التبعية.
الملامح الرئيسية Dependency Injector
:
Factory
و Singleton
و Callable
Coroutine
و Object
و List
و Dict
و Configuration
و Resource
و Dependency
و Selector
الذين يساعدون في تجميع الكائنات الخاصة بك. راجع مقدمي الخدمة.yaml
و ini
و json
وإعدادات pydantic
ومتغيرات البيئة والقواميس. راجع موفر التكوين.mypy
ودية. راجع الكتابة و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
عند استدعاء الدالة main()
، يتم تجميع تبعيات Service
وإدخالها تلقائيًا.
عندما تقوم بالاختبار، يمكنك استدعاء الأسلوب container.api_client.override()
لاستبدال عميل واجهة برمجة التطبيقات الحقيقي بآخر وهمي. عند استدعاء main()
، يتم إدخال النموذج الوهمي.
يمكنك استبدال أي مزود بمزود آخر.
كما أنه يساعدك في إعادة تكوين المشروع لبيئات مختلفة: استبدل عميل API بكعب روتين على المطور أو المسرح.
باستخدام Dependency Injector
، يتم دمج تجميع الكائنات في حاوية. يتم تعريف حقن التبعية بشكل صريح. وهذا يجعل من السهل فهم وتغيير كيفية عمل التطبيق.
قم بزيارة المستندات لمعرفة المزيد عن حقن التبعية وعكس التحكم في بايثون.
الحزمة متاحة على PyPi:
نقطة تثبيت حاقن التبعية
الوثائق متاحة هنا .
اختر واحدًا مما يلي:
اختر واحدًا مما يلي:
يعتمد الإطار على مبدأ PEP20 (Zen of Python):
Explicit is better than implicit
تحتاج إلى تحديد كيفية التجميع ومكان إدخال التبعيات بشكل صريح.
قوة الإطار تكمن في بساطته. يعد Dependency Injector
أداة بسيطة للمفهوم القوي.
Dependency Injector
على جيثبDependency Injector
Dependency Injector
develop