فهم الفارق بين @Inject و @Injectable في Angular 2 TypeScript
في Angular 2 و TypeScript، تستخدم الزراعة (Dependency Injection) لإدارة تبادل الاعتمادات بين مكونات التطبيق. تحمل الشكلين @Inject و@Injectable أدوارًا مختلفة في هذا السياق، وهنا سأقوم بتوضيح الاختلاف بينهما.
@Injectable:
عندما تقوم بوضع @Injectable() فوق فئة (Class)، فإنك ببساطة تُشير إلى أن هذه الفئة يمكن استخدامها في عملية الزراعة. بمعنى آخر، يمكنك حقن هذه الفئة في مكونات أخرى. على سبيل المثال، في كودك المرفق، تقوم الفئة Hamburger
بالتعبير عن كائن من نوع “همبرغر”، والذي يحتوي بدوره على كائن من نوع Bun
كمعتمد عليه.
@Inject:
أما عند استخدام @Inject في مكون آخر، مثل الكود الذي قدمته، يُستخدم لتحديد الاعتماد الذي تريد حقنه. في هذا السياق، يُستخدم @Inject مع تعليمة constructor لتحديد النوع الذي تُريد حقنه. في المثال، تقوم @Inject(Hamburger)
بإشارة إلى أنك تريد حقن كائن من نوع Hamburger
في المُتغير h
الذي يُمثل همبرغر.
ببساطة، يتيح لك @Injectable() تحديد الكلاسات التي يمكن حقنها، بينما يُستخدم @Inject لتحديد الكائن الفعلي الذي سيتم حقنه.
في إجابتي هذه، أحاول أن أوضح بشكل شامل الفارق بين استخدام @Injectable و @Inject في Angular 2 مع TypeScript. يجدر بك مراجعة كود المثال لفهم أفضل حول كيفية تنفيذ هذه المفاهيم في الواقع وكيف تعمل عملية الزراعة في هذا السياق.
المزيد من المعلومات
بالطبع، دعونا نقوم بتفصيل المزيد حول الفارق بين @Inject
و @Injectable
في Angular 2 مع TypeScript.
@Injectable:
عند وضع @Injectable()
على فئة، فإنها تحدد أن هذه الفئة يمكن استخدامها في عملية الزراعة (Dependency Injection)، وتقوم بتحويل الفئة إلى إنشاء قابل للحقن. عندما يتم تضمين @Injectable()
، يُعتبر الكلاس جاهزًا لتوفيره كاعتماد (Dependency) في مكونات أخرى، وذلك بتحديده في constructor بواسطة @Inject
.
@Inject:
على الجانب الآخر، يستخدم @Inject
لتحديد النوع الذي تريد حقنه في constructor. يتم استخدامه في constructor لتوضيح الاعتماد الذي يجب حقنه، ويُعطي لك السيطرة الكاملة على كيفية تحديد الاعتماد. في المثال الذي قدمته، @Inject(Hamburger)
يُشير إلى أنك تريد حقن كائن من نوع Hamburger
، وهذا يعني أن Angular سيقوم بإنشاء كائن Hamburger
ويحقنه في constructor.
يمكن أن يكون لديك استفسار حول متى يجب استخدام @Inject
وهل هو ضروري في كل الحالات. في الواقع، عندما تستخدم Angular، يقوم بفحص الأنواع تلقائيًا ويقوم بتوفير الاعتماد الصحيح تلقائيًا دون الحاجة إلى @Inject
في العديد من الحالات. ومع ذلك، يمكن استخدام @Inject
إذا كنت ترغب في فحص النوع بنفسك أو إذا كنت تعمل مع أنواع متقدمة.
في الختام، تتيح لك Angular 2 بلغة TypeScript تنظيم وتسهيل عمليات الزراعة وإدارة الاعتمادات بشكل فعال، واستخدام @Inject
و @Injectable
يشير إلى كيفية تعامل Angular مع تلك الاعتمادات.