سؤال

أنا جديد على Flex و Cairngorm. بينما أستخدم ServiceLocator ، أواجه المشكلة: خطأ: C0001e: يمكن إنشاء مثيل واحد فقط من ServiceLocator.

الرمز الخاص بي مثل هذا:

في serives.mxml:

<cairngorm:ServiceLocator xmlns:mx="http://www.adobe.com/2006/mxml"
xmlns:cairngorm="com.adobe.cairngorm.business.*">
<mx:HTTPService id="statistServ"
    url="rooms.xml"
    showBusyCursor="true"
    method="POST"
    resultFormat="array"/>

في المندوب ، لدي قصاصات:

this.service = ServiceLocator.getInstance().getHTTPService(”statistServ”);

في main.xml ، قصاصات مثل:

<business:Service id="service" />

تظهر رسالة الخطأ الصغيرة الرائعة هذه في اللحظة التي أحمل فيها مثيلًا ثانية من بعض الوحدة النمطية التي تتطلب httpservice.

هل هناك أي طريقة لحل هذه المشكلة دون التحول إلى إطار آخر؟

أفضل التمنيات،

شو من الصين

هل كانت مفيدة؟

المحلول

الخطأ الذي تراه هو من تنفيذ Cairngorm لنمط Singleton. إنه يمنعك من إنشاء مثيل ثانية من ServiceLocator لأن الإطار يتطلب أن يكون هناك واحد فقط. عند تحميل المثيل الثاني من الوحدة النمطية الخاصة بك ، يحاول الكود أيضًا إنشاء مثيل ثانٍ من ServiceLocator عندما يجب أن يستخدم GetInstance () (أو عدم الحصول على مثيل على الإطلاق).

من خلال إعلان علامة الخدمات الخاصة بك في Main.mxml ، قمت بإنشاء مثيل ServiceLocator الوحيد الخاص بك ولا يمكن إعلانه أو تحديده في أي مكان آخر. إذا كان main.mxml جزءًا من الوحدة النمطية التي تحاول إنشاء مثيل لها أكثر من مرة ، فهذه هي مشكلتك هناك. إذا لم يكن الأمر كذلك ، فلا يمكنني معرفة أين تعتمد المشكلة في الكود على العينة المحدودة أعلاه ، ولكن يجب أن تكون في مكان ما في الوحدة النمطية.

ردا على التعليق:

لا مشكلة. يمكنك بسهولة حل مشكلتك بإعلان خدمتك في ActionScript بدلاً من MXML. من خلال إعلان علامة في MXML ، يمكنك دائمًا إنشاء مثيل من الفئة المقابلة ، بينما تريد بدلاً من ذلك استرداد المثيل الوحيدة في المفرد. للقيام بذلك ، قم بتضمين ما يلي رمزًا داخل الوحدة النمطية MXML:

var service:Service = Service(ServiceLocator.getInstance());

هذا يعادل بشكل أساسي ما تحاول القيام به مع علامة MXML ، باستثناء عدم إنشاء مثيل خدمة جديد.

ومع ذلك ، لا تزال بحاجة إلى إنشاء مثيل للخدمة في مكان ما. للقيام بذلك ، ضع خدمة MXML للخدمة داخل MXML الرئيسية للتطبيق الذي يقوم بتحميل الوحدات النمطية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top