البرمجة

تسميات التحديد في Dagger 2

بما أن لديك واجهتين تنفذان نفس الواجهة “Shape”، وتحاول توفيرهما كمكونات لـ “ApplicationComponent”، فإنه يتوجب عليك توجيه Dagger 2 لفهم كيفية التعامل مع هذا التضارب.

في الواقع، يعتبر Dagger 2 نظام تحليل ثابت (Compile-Time)، وهو يحتاج إلى معرفة واضحة حول كيفية حل الاعتمادات (Dependencies) وتوفيرها. عندما يواجه Dagger 2 اعتمادًا على واجهة متعددة التوافق، مثل “Shape” في حالتك، يحتاج إلى معرفة أي منها يجب استخدامها.

لتوضيح الأمور، يمكنك استخدام التسميات (Qualifiers) لتمييز بين توفيرات الواجهة المتعددة. يمكنك القيام بذلك عن طريق إنشاء تسميات مخصصة توضح أي نوع من أنواع “Shape” تحتاجها كل واجهة.

لنقم بتعديل الكود لتحقيق هذا:

java
import javax.inject.Qualifier; import java.lang.annotation.Retention; import static java.lang.annotation.RetentionPolicy.RUNTIME; @Qualifier @Retention(RUNTIME) public @interface RectangleShape {} @Qualifier @Retention(RUNTIME) public @interface CircleShape {}

ثم قم بتعديل ApplicationModule و ApplicationComponent كما يلي:

java
@Module public class ApplicationModule { @Provides @RectangleShape public Shape provideRectangle() { return new Rectangle(); } @Provides @CircleShape public Shape provideCircle() { return new Circle(); } } @Component(modules = ApplicationModule.class) public interface ApplicationComponent { @RectangleShape Shape provideRectangle(); @CircleShape Shape provideCircle(); }

بهذا التغيير، يعرف Dagger 2 الآن كيفية تفريق بين توفيرات الواجهة المتعددة باستخدام التسميات المحددة (@RectangleShape و @CircleShape). وبالتالي، عندما يطلب ApplicationComponent حقن Shape، سيكون لديه خياران: يمكنه استرجاع Rectangle أو Circle بناءً على الطلب.

المزيد من المعلومات

الآن بعد أن قمت بتطبيق التغييرات اللازمة في التعريفات وتوفيرات الواجهات، يمكنك استخدام هذه التسميات لحل مشكلة التضارب في Dagger 2.

عندما يتم تنفيذ تطبيقك وتحتاج إلى حقن “Shape”، يمكنك الآن استخدام التسميات للتحديد بوضوح. على سبيل المثال، إذا كنت بحاجة إلى حقن “Rectangle”، يمكنك فعل ذلك كالتالي:

java
Shape rectangle = applicationComponent.provideRectangle();

وإذا كنت بحاجة إلى حقن “Circle”، يمكنك استخدام التسمية المناسبة:

java
Shape circle = applicationComponent.provideCircle();

باستخدام هذه الطريقة، يمكنك الآن التحكم بدقة في الأنواع المحددة من “Shape” التي يتم حقنها في تطبيقك، وذلك بفضل التسميات المخصصة التي قمت بتعريفها.

هذا النهج يسمح لك بتحقيق أقصى قدر من المرونة والوضوح في تكوين تطبيقك، بينما يسهل على Dagger 2 تحديد ما إذا كان يجب حقن “Rectangle” أو “Circle” استنادًا إلى السياق الذي تتواجد فيه.

مقالات ذات صلة

زر الذهاب إلى الأعلى
إغلاق

أنت تستخدم إضافة Adblock

يرجى تعطيل مانع الإعلانات حيث أن موقعنا غير مزعج ولا بأس من عرض الأعلانات لك فهي تعتبر كمصدر دخل لنا و دعم مقدم منك لنا لنستمر في تقديم المحتوى المناسب و المفيد لك فلا تبخل بدعمنا عزيزي الزائر