حل icontainer
-
25-09-2019 - |
سؤال
ما هي الطريقة المقترحة للحصول على حاوية AUTOFAC من داخل فئة في التطبيق؟ هل يوفر Autofac حل خاصية Icontainer في الفصل أو هل أحتاج إلى تخزين الحاوية على مستوى العالم بمجرد أن أقوم ببنائها؟
المحلول
انك سوف تحتاج IComponentContext
أو ILifetimeScope
لمعظم الأغراض. يتم توفيرها تلقائيًا بواسطة Autofac ، لذلك كل ما عليك فعله هو أخذ (مُنشئ) التبعية على أحدها وسيتم حقن المثيل الحالي.
توفر كلتا الواجهات المعيار Resolve()
العمليات ، بينما ILifetimeScope
يمتد IComponentContext
عن طريق إضافة طرق لبدء حياة متداخلة جديدة.
المكونات التي ترغب في استخدام خدمات الحاوية للوصول إلى المكونات الأخرى تحتاج إلى القيام بذلك في نطاقها الخاص ، وليس "العالمي" IContainer
, ، بحيث يمكن إرجاع المثيل الصحيح. على سبيل المثال ضمن طلب HTTP ، تم حقنه IComponentContext
أو ILifetimeScope
سيكون الشخص للطلب الحالي.
يمكن أيضًا التغلب على معظم المشكلات التي تتطلب سياقًا محقنًا (في كثير من الأحيان أكثر أناقة) باستخدام أنواع العلاقات - راجع: http://autofac.readthedocs.org/en/latest/resolve/relationships.html.