الحل البديل مجال التطبيق صافي فقط تمر الأجسام من حيث القيمة

StackOverflow https://stackoverflow.com/questions/323212

سؤال

وأنا تطوير تطبيق الصافي الذي يعتمد على heavely الإضافات. التطبيق نفسه يحتوي على اتصال إلى الملقم البعيد.

ومؤخرا كنت حفرت في مجالات التطبيق ويعتبرونها الحل الأمثل لعزل رمز البرنامج المساعد من بقية التطبيق.

ولكن هناك عيب واحد كبير مما يجعلني غير قادر على تنفيذ مجالات التطبيق لاستضافة الإضافات. يبدو أن هناك أي وسيلة لتمرير كائن حسب المرجع إلى مجال تطبيق آخر الذي هو ضروري لتمرير إشارة إلى كائن الاتصال.

وكنت اتمنى شخص ما يمكن أن تعطيني حلا حتى أتمكن من تمرير إشارة إلى هذا الكائن.

ملحوظة: إنشاء وكيل غير وارد، وطبقة اتصال يعمل بالفعل كوكيل منذ الطبقات يتم إنشاؤها السيارات

.

وNOTE2: System.AddIn لا يمكن استخدامها لأنها لا تتوفر على إطار الاتفاق

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

المحلول

هل حاولت المستمدة من MarshalByRefObject ؟ انها الألم لأنه مسامير يصل بك التسلسل الهرمي الميراث، ولكن اعتقد انها ما تريد.

ومن المستندات:

<اقتباس فقرة>   

وMarshalByRefObject هو الفئة الأساسية   للكائنات التي التواصل عبر   حدود مجال التطبيق من قبل   تبادل الرسائل باستخدام الوكيل.   الكائنات التي لا ترث من   MarshalByRefObject هي ضمنا   حشد من حيث القيمة. عندما بعيد   تطبيق مراجع مارشال من قبل   كائن قيمة، ونسخة من الكائن هو   مرت عبر مجال التطبيق   الحدود.

     

التحف MarshalByRefObject هي   الوصول مباشرة داخل   حدود التطبيق المحلي   نطاق. أول مرة تطبيق   في مجال تطبيق بعيد   يصل إلى MarshalByRefObject، وكيل   يتم تمريرها إلى التطبيق البعيد.   المكالمات اللاحقة على الوكيل   تنظيم العودة إلى مقيم الكائن   في مجال التطبيق المحلي.

     

ويجب أن أنواع يرث   MarshalByRefObject عندما يكون نوع غير   تستخدم في مجال التطبيق   الحدود، والدولة لل   يجب أن لا يتم نسخ الكائن لأن   أعضاء من وجوه ليست صالحة للاستعمال   خارج نطاق التطبيق حيث   أنشئت من أجلها.

في تجربتي، وأنه يمكن أن يكون الحد جدا - كنت حقا بحاجة الى القيام بأقل قدر ممكن عبر الحدود AppDomain، وتقييد يفضل نفسك للعمليات التي تتطلب فقط أنواع بدائية، سلاسل، والمصفوفات من الاثنين معا. قد يكون هذا جيدا المقرر أن خبرتي الخاصة في العمل مع AppDomains متعددة، ولكن هذا مجرد تحذير أنه قليلا من حقل ألغام.

نصائح أخرى

لاجراء محادثات مع نفس مثيل بين AppDomains، يجب أن ترث من MarshalByRefObject . يتم بهذه الطريقة، كل استدعاء الأسلوب إلى كائن (بما في ذلك الخصائص الخ) هي في الواقع دعوة الاتصال عن بعد للآخرين التطبيق المجال. هل تساعد؟

كن على علم بأن تنظيف وكلاء MarshalByRefObject وتنظيف على أساس الإيجار. باختصار إذا كنت لا تستخدم الكائن لفترة محددة سيتم استردادها. يمكنك التحكم في ذلك من خلال تجاوز InitializeLifetimeService للعودة كائن الإيجار الذي يطابق احتياجات لكم. إذا كنت إرجاع null يتم تعطيل تأجير ومن ثم يتم استصلاحها الكائن فقط عندما يتم تفريغها في AppDomain.

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