عام الحاوية على فضح بوكو الحالات الأخرى AppDomains - كيف يعمل ؟

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

سؤال

أنا مفتون هذا الجواب من آخر لذلك الموضوع, و كنت آمل شخص يمكن أن تساعد لي من تسليط بعض الضوء على مفهوم.

يجب أن يكون التطبيق الأساسي و مجموعة من الأطفال AppDomains أن يتم إنشاء و تهيئة طريق التطبيق الأساسي.في البرمجية الزائفة:

التطبيق الأساسي:

class Parent
{
    public void InitChildren(IList<ChildInfo> children)
    {
        foreach (var childInfo in children)
        {
            var ad = CreateNewChildAppDomain();
            var child = (Child)ad.CreateInstanceAndUnwrap(typeof(Child));
            child.Init(this);
        }
    }

    public void Register(BasePoco info)
    {
        // Do something with info.
    }
}

الطفل AppDomain:

class Child : MarshalByRefObject
{
    public void Init(Parent parent)
    {
        parent.Register(new Container<MyInfo>(new MyInfo()));
    }
}

class MyInfo : BasePoco // <- not a MarshalByRefObject!
{
    public MyInfo() { ... }
}

خلال Init () ، طفل AppDomain instantiates a POCO الكائن الذي هو غير marshalable من حيث التعريف.دعونا نفترض أيضا لا يمكننا تعديله في هذا الصدد.

المرتبطة الإجابة تشير إلى أن التفاف عليه في Container<T> (التي هي نفسها هو marshalable) ينبغي أن يسمح لها أن تنتقل إلى التطبيق الأساسي.أنا أفهم هذا لأنه الوكيل Container<MyInfo> سبيل المثال أن يحصل حقا مرت عبر.

ما لا أفهمه هو كيف التطبيق الأساسي يمكن الوصول إلى بوكو سبيل المثال في حاوية خلال وكيل الحاوية.أرى طاقتها الضمني يلقي المشغل في Container<T> وأنا أفهم أنه يعود الواردة بوكو سبيل المثال.ولكن تلك الحالة لا يتم بروكسي نفسها - انها لا تزال في الطفل AppDomain!لا هذا الانفصال ؟

ما يحدث في الواقع هنا ؟

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

المحلول

حالما الحاوية ترجع سبيل المثال يعيش في الأخرى AppDomain (ما إذا كان هذا يحدث عن طريق قيمة الممتلكات أو التحويل الضمني المشغل) ، الكائن سيتم تنظيمها.إذا كان MarshalByRefObject, بروكسي جديد سيتم إنشاؤها حتى تتمكن من الوصول إليه.وإلا الكائن سيتم نسخ (تسخر من حيث القيمة ، تسلسل) في مجال التطبيق الحالي.

الشيء الوحيد الذي الطبقة الحاوية هو مبين في هذا السؤال يمكن أن تساعد إذا كنت ترغب في الحفاظ على الوكيل إلى كائن آخر لا ينبغي تعبئتها.ولكن في هذه الحالة ، يجب الوصول إلى الخاصية قيمة أو استخدام التحويل الضمني المشغل من AppDomain حيث الوكيل الأرواح ، لأن هذا من شأنه أن يسبب الكائن في حاوية يمكن تنظيم.لا يزال يمكن استخدام حاوية حجة في طريقة على كائن يعيش في نفس AppDomain مثل كائن حاوية ، وبالتالي أساسا مما يسمح لك للحفاظ على مرجع إلى غير marshallable كائن (غير قابل للتسلسل وليس MarshalByRef ، أو من نوع في الجمعية التي لا يمكن تحميلها إلى AppDomain مع الوكيل.... الخ) و أن تمر عليه مثل "التعامل".

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