मैं एक Context Per Request
पैटर्न बनाने के लिए EF code first
, MVC
और StructureMap
की एक ट्यूटोरियल में नीचे के रूप में एक कोड देखा:स्ट्रक्चर मैप HttpContextScoped आवश्यक है?
protected void Application_Start()
{
...
initStructureMap();
}
private static void initStructureMap()
{
ObjectFactory.Initialize(x =>
{
x.For<IUnitOfWork>().HttpContextScoped().Use(() => new Context());
x.For<IFirstEntity>().Use<FirstEntity>();
x.For<ISecondEntity>().Use<SecondEntity>();
x.For<IThirdEntity>().Use<ThirdEntity>();
});
ControllerBuilder.Current.SetControllerFactory(new StructureMapControllerFactory());
}
protected void Application_EndRequest(object sender, EventArgs e)
{
ObjectFactory.ReleaseAndDisposeAllHttpScopedObjects();
}
public class StructureMapControllerFactory : DefaultControllerFactory
{
protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
{
return ObjectFactory.GetInstance(controllerType) as Controller;
}
}
FirstEntity
, SecondEntity
और ... सब अपने निर्माता में IunitOfWork
की जरूरत है।
आप यह सिर्फ Context
नहीं दूसरों के लिए और EndRequest
घटना यह कहता है ReleaseAndDisposeAllHttpScopedObjects()
में HttpContextScoped()
का उपयोग करता है के रूप में देख सकते हैं।
1- क्या यह एक सही दृष्टिकोण है?
2- क्या मैं अन्य सभी Service layer Interfaces
के लिए HttpContextScoped() का उपयोग करूंगा या न केवल IUnitOfWork
के लिए? उदाहरण के लिए:
x.For<IFirstEntity>().Use<FirstEntity>();
या
x.For<IFirstEntity>().HttpContextScoped().Use(() => new FirstEntity());
3- ReleaseAndDisposeAllHttpScopedObjects()
सभी उदाहरणों disposes या सिर्फ Context
disposes?
मैंने प्रश्न 2 –
अद्यतन किया गया अद्यतन अद्यतन किया। जब तक आपको एक ही स्थिति को रखने की आवश्यकता न हो या उदाहरण के दौरान राज्य को बनाने के लिए महंगा हो और राज्य को साझा कर सकें, तो क्षणिक वस्तुओं के साथ जाएं। – PHeiberg
धन्यवाद, मेरी समस्या तब होती है जब इन उदाहरणों का निपटारा किया जाएगा? क्या वे EndRequest में भी निपटान करते हैं या नहीं? –