سؤال

أنا أعمل مع structuremap لتلبية احتياجاتي IOC.

لجعل الأمور قابلة للاختبار ، أنا أتجاوز IContainer الحالات حول كلما كان ذلك ممكنا ، وعادة ما يكون كمعلمات مُنشأة. كملاحة ، أود أن أكون قادرًا على العودة إلى الاستخدام ObjectFactory لمؤسس بدون معلمة.

أبسط طريقة (اعتقدت) أن تفعل ذلك هي ببساطة الحصول على IContainer ال ObjectFactory يلف الفئة ويمرر ذلك إلى المُنشئ الآخر. لسوء الحظ ، لا يمكنني العثور على أي مكان يتم عرض هذه الحالة بشكل علني.

السؤال هو:

هل هناك طريقة للحصول على IContainer داخل ObjectFactory حتى أتمكن من التعامل معه ببساطة كمثيل يوفره المستخدم؟

بدلاً من ذلك ، هل هناك طريقة لتكرار تكوين ObjectFactory إلى جديد Container نموذج؟

مثال:

أود أن أكون قادرًا على القيام بما يلي:

public class MyClass
{
    public MyClass()
    {
        Container = ... // The ObjectFactory container instance.
    }

    public MyClass(IContainer container)
    {
        Container = container;
    }

    public IContainer Container { get; private set; }
}
هل كانت مفيدة؟

المحلول

يعرض ObjectFactory خاصية حاوية تمنحك Icontainer التي تبحث عنها.

في أي وقت تحتاج فيه إلى icontainer (والذي لا ينبغي أن يكون في كثير من الأحيان) ، يمكنك دائمًا أخذ الاعتماد عليه في فئة CTOR.

public class INeedAContainer
{
    private readonly IContainer _container;

    public INeedAContainer(IContainer container)
    {
        _container = container;
    }

    // do stuff
}

لا أعتقد أن هناك طريقة لاستنساخ icontainer. هناك طريقة حاوية. getNedContainer () والتي تتيح لك الحفاظ على عابرةك كما هو مدى عمر الحاوية المتداخلة. غالبًا ما تستخدم الحاويات المتداخلة في بيان "استخدام" وهي مفيدة للغاية للسيطرة على حالة الأشياء مثل حدود معاملات قاعدة البيانات.

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