الحل البديل مجال التطبيق صافي فقط تمر الأجسام من حيث القيمة
-
11-07-2019 - |
سؤال
وأنا تطوير تطبيق الصافي الذي يعتمد على heavely الإضافات. التطبيق نفسه يحتوي على اتصال إلى الملقم البعيد.
ومؤخرا كنت حفرت في مجالات التطبيق ويعتبرونها الحل الأمثل لعزل رمز البرنامج المساعد من بقية التطبيق.
ولكن هناك عيب واحد كبير مما يجعلني غير قادر على تنفيذ مجالات التطبيق لاستضافة الإضافات. يبدو أن هناك أي وسيلة لتمرير كائن حسب المرجع إلى مجال تطبيق آخر الذي هو ضروري لتمرير إشارة إلى كائن الاتصال.
وكنت اتمنى شخص ما يمكن أن تعطيني حلا حتى أتمكن من تمرير إشارة إلى هذا الكائن.
ملحوظة: إنشاء وكيل غير وارد، وطبقة اتصال يعمل بالفعل كوكيل منذ الطبقات يتم إنشاؤها السيارات
.وNOTE2: System.AddIn لا يمكن استخدامها لأنها لا تتوفر على إطار الاتفاق
المحلول
هل حاولت المستمدة من MarshalByRefObject ؟ انها الألم لأنه مسامير يصل بك التسلسل الهرمي الميراث، ولكن اعتقد انها ما تريد.
ومن المستندات:
<اقتباس فقرة>وMarshalByRefObject هو الفئة الأساسية للكائنات التي التواصل عبر حدود مجال التطبيق من قبل تبادل الرسائل باستخدام الوكيل. الكائنات التي لا ترث من MarshalByRefObject هي ضمنا حشد من حيث القيمة. عندما بعيد تطبيق مراجع مارشال من قبل كائن قيمة، ونسخة من الكائن هو مرت عبر مجال التطبيق الحدود.
التحف MarshalByRefObject هي الوصول مباشرة داخل حدود التطبيق المحلي نطاق. أول مرة تطبيق في مجال تطبيق بعيد يصل إلى MarshalByRefObject، وكيل يتم تمريرها إلى التطبيق البعيد. المكالمات اللاحقة على الوكيل تنظيم العودة إلى مقيم الكائن في مجال التطبيق المحلي.
ويجب أن أنواع يرث MarshalByRefObject عندما يكون نوع غير تستخدم في مجال التطبيق الحدود، والدولة لل يجب أن لا يتم نسخ الكائن لأن أعضاء من وجوه ليست صالحة للاستعمال خارج نطاق التطبيق حيث أنشئت من أجلها.
اقتباس فقرة>في تجربتي، وأنه يمكن أن يكون الحد جدا - كنت حقا بحاجة الى القيام بأقل قدر ممكن عبر الحدود AppDomain، وتقييد يفضل نفسك للعمليات التي تتطلب فقط أنواع بدائية، سلاسل، والمصفوفات من الاثنين معا. قد يكون هذا جيدا المقرر أن خبرتي الخاصة في العمل مع AppDomains متعددة، ولكن هذا مجرد تحذير أنه قليلا من حقل ألغام.
نصائح أخرى
لاجراء محادثات مع نفس مثيل بين AppDomains، يجب أن ترث من MarshalByRefObject . يتم بهذه الطريقة، كل استدعاء الأسلوب إلى كائن (بما في ذلك الخصائص الخ) هي في الواقع دعوة الاتصال عن بعد للآخرين التطبيق المجال. هل تساعد؟
كن على علم بأن تنظيف وكلاء MarshalByRefObject
وتنظيف على أساس الإيجار. باختصار إذا كنت لا تستخدم الكائن لفترة محددة سيتم استردادها. يمكنك التحكم في ذلك من خلال تجاوز InitializeLifetimeService
للعودة كائن الإيجار الذي يطابق احتياجات لكم. إذا كنت إرجاع null
يتم تعطيل تأجير ومن ثم يتم استصلاحها الكائن فقط عندما يتم تفريغها في AppDomain.