هل يمكن لحاوية الوحدة تمرير مرجع لنفسها كمعلمة منشئة؟

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

  •  06-07-2019
  •  | 
  •  

سؤال

هل هناك طريقة لحاوية الوحدة لتمرير نفسها إلى كائن؟

أي.:

public class Something {

     public Something(IUnityContainer container) {
           ...
     }
}
هل كانت مفيدة؟

المحلول

الإجابة القصيرة هي نعم.

يجب أن يتم تمرير هذا تلقائيًا عند استخدام Resolve طُرق.

على سبيل المثال:

IUnityContainer container = new UnityContainer();
var something = container.Resolve<Something>();

بالإضافة إلى ذلك، هذه هي نفس التقنية التي يستخدمها Prism (في CodePlex) إذا كنت تريد النظر في ذلك.

تحديث الاختبار المضافة:

[TestClass]
public class Spike
{
    [TestMethod]
    public void unityTest()
    {
        var container = new UnityContainer();
        var something= container.Resolve<Something>();
        Assert.AreSame(container, something.Container);
        // This passes. Success.
    }
}

public class Something
{
    public Something(IUnityContainer container)
    {
        Container = container;
    }

    public IUnityContainer Container { get; set; }
}

نصائح أخرى

والجواب الأول هو نوع من ما كنت أفكر. شكرا لك.

وقبل الوحدة، بنينا لدينا حاوية اللجنة الأولمبية الدولية الخاصة، ونحن لديها تركيب شيء من هذا القبيل ...

<constructor>
    <param name="factory" value="[{factory}]"/>
</constructor>

وو[{المصنع}] يسبب لها بالمرور نفسها كمعلمة.

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

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

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

وشكرا للمعلومات.

وجاي

عذرا ... الرجل الجديد. أرى الآن وهذا ينبغي أن قد تم تعليق، وليس جوابا.

وكما ذكر bendewey يمكنك تمرير ذلك، كما هو كائن، مثل أي شيء آخر، ولكن، لماذا تمر عليه؟

لديك واحد فقط، لماذا لا يكون أن يكون خاصية ثابتة أن أي فئة يمكن الوصول؟

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