structuremap و ObjectFactory و Icontainer
-
22-09-2019 - |
سؤال
أنا أعمل مع 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 () والتي تتيح لك الحفاظ على عابرةك كما هو مدى عمر الحاوية المتداخلة. غالبًا ما تستخدم الحاويات المتداخلة في بيان "استخدام" وهي مفيدة للغاية للسيطرة على حالة الأشياء مثل حدود معاملات قاعدة البيانات.