साथ प्रबंध NHibernate ISession किसी के बारे में कैसे Autofac (एक ASP.NET MVC आवेदन के मामले में) NHibernate ISession उदाहरण प्रबंधित कर सकते हैं किसी भी सुझाव या सर्वोत्तम प्रथाओं है?Autofac
Autofac
उत्तर
मैं एनएचबीरनेट सत्रों को संभालने के तरीके से अत्यधिक परिचित नहीं हूं। उस ने कहा, ऑटोफैक में उत्कृष्ट उदाहरण जीवनकाल हैंडलिंग (scoping और deterministic disposal) है। कुछ संबंधित संसाधन this article और this question हैं। चूंकि आप एएसपी.नेट एमवीसी भूमि में हैं, सुनिश्चित करें कि आप the MVC integration stuff पर भी देखें।
public class SomeController
{
private readonly Func<Owned<ISession>> _sessionFactory;
public SomeController(Func<Owned<ISession>> sessionFactory)
{
_sessionFactory = sessionFactory;
}
public void DoSomeWork()
{
using (var session = _sessionFactory())
{
var transaction = session.Value.BeginTransaction();
....
}
}
}
कंटेनर सेटअप पाने के लिए काम करने के लिए यह काफी है:
बिंदु को वर्णन करने के लिए, आप निम्न तरीके से Autofac कारखाने प्रतिनिधियों उपयोग कर सकते हैं पर एक त्वरित नमूना और Owned
उदाहरण जीवन पर पूरा नियंत्रण पाने के लिए सामान्य है सरल। सूचना है कि हम Func<>
और Owned<>
प्रकार प्राप्त करने के लिए कुछ भी करने की जरूरत नहीं है, इन Autofac द्वारा स्वचालित रूप से उपलब्ध कराया जाता है:
builder.Register(c => cfg.BuildSessionFactory())
.As<ISessionFactory>()
.SingleInstance();
builder.Register(c => c.Resolve<ISessionFactory>().OpenSession());
अद्यतन: मेरे तर्क यहाँ है कि, this NHibernate tutorial, के जीवनकाल के अनुसार सत्र उदाहरण "काम की इकाई" का होना चाहिए। इस प्रकार जब सत्र सत्र बनाया जाता है और जब सत्र का निपटारा किया जाता है तो हमें दोनों को नियंत्रित करने की आवश्यकता होती है।
ऑटोफैक के साथ हमें सीधे प्रकार के बजाय Func<>
का अनुरोध करके यह नियंत्रण मिलता है। Func<>
का उपयोग नहीं करने की आवश्यकता होगी कि नियंत्रक उदाहरण बनने से पहले सत्र उदाहरण पहले बनाया जाए।
अगला, ऑटोफैक में डिफ़ॉल्ट यह है कि उदाहरणों में उनके कंटेनर का जीवनकाल होता है। चूंकि हम जानते हैं कि काम की इकाई पूरी होने के तुरंत बाद हमें इस उदाहरण को निपटाने की शक्ति की आवश्यकता है, हम Owned
उदाहरण का अनुरोध करते हैं। स्वामित्व वाले उदाहरण का निपटान इस मामले में तुरंत अंतर्निहित सत्र का निपटान करेगा।
संपादित करें: ऑटोफैक और शायद अन्य कंटेनर जैसे ध्वनि जीवन भर सही ढंग से गुंजाइश कर सकते हैं। यदि ऐसा है, तो इसके लिए जाओ।
सत्रों का प्रबंधन करने के लिए अपने आईओसी कंटेनर का उपयोग करना अच्छा नहीं है। आपके सत्र का जीवनकाल आपके कार्य की इकाई (लेनदेन सीमा) से मेल खाना चाहिए। किसी वेब एप्लिकेशन के मामले में, यह लगभग निश्चित रूप से वेब अनुरोध का जीवनकाल होना चाहिए।
सबसे आम तरीका इस लक्ष्य को हासिल करने के लिए, एक HttpModule है कि दोनों अपने सत्र बनाता है और जब एक अनुरोध शुरू होता है अपने लेन-देन शुरू होता है के साथ है फिर जब अनुरोध समाप्त हो गया है करता है। मैं HttpModule HttpContext.Items संग्रह में सत्र पंजीकृत करता।
अपने आईओसी कंटेनर में, आप ISessionLocator के खिलाफ HttpContextSessionLocator जैसे कुछ पंजीकृत कर सकते हैं।
मैं उल्लेख करना चाहिए कि अपने सामान्य त्रुटि हैंडलिंग वर्तमान सत्र का पता लगाने और स्वचालित रूप से लेन-देन रोल बैक करना चाहिए, या आप काम का आधा एक इकाई करने से लग सकती है।
* क्यों * यह एक अच्छा विचार नहीं है? –
इस पर जेम्स के साथ सहमत हैं, मैं अपने (एएसपीएनटी एमवीसी) नियंत्रकों में कार्य कारखाने की एक इकाई इंजेक्ट करता हूं और आवश्यकता होने पर नियंत्रक के अंदर से काम की एक इकाई बनाता हूं। कारखाना आईओसी कंटेनर (संरचना मानचित्र) – AwkwardCoder
@AWC के आसपास सिर्फ रैपर वर्ग (सेवा लोकेटर) है: यह वही है जो मैं भी करता हूं।बात यह है कि ऑटोफैक कंटेनर आपको फैक्ट्री सामान ओओटीबी देता है। –
- 1. कैसे Autofac
- 2. MVC वेब Autofac एकता
- 3. Autofac - लाइफटाइम और मॉड्यूल
- 4. Autofac और IDisposable इंटरफ़ेस
- 5. कैसे Autofac InstancePerHttpRequest
- 6. Autofac संपत्ति इंजेक्शन
- 7. FluentValidation Autofac ValidatorFactory
- 8. Autofac: खुले सामान्य प्रकार
- 9. NHibernate और Autofac
- 10. Autofac: सभी उदाहरणों एक प्रकार
- 11. रजिस्टर ASP.Net MVC 4 और Autofac
- 12. ASP.NET WebAPI + Autofac नहीं मिल ApiControllers
- 13. बंद करो Autofac मॉड्यूल पंजीकरण पहले से पंजीकृत घटकों
- 14. ASP.NET MVC 3, कार्रवाई फ़िल्टर, और Autofac निर्भरता इंजेक्शन
- 15. Autofac - ऑटो पंजीकरण त्रुटि: नहीं कंस्ट्रक्टर्स सार्वजनिक बंधन झंडे '
- 16. Autofac 2.4.5 के साथ परिपत्र संदर्भों को कैसे संभालें?
- 17. autofac: नामित प्रकार के संग्रह को कैसे हल करें?
- 18. Autofac में Lazy <T> समर्थन के साथ क्या हुआ?
- 19. Autofac के साथ मेरे सेवा निर्माता को नियंत्रक के मॉडलस्टेट को कैसे पास किया जाए?
- 20. Autofac ContainerBuilder के लिए एक नया सूची <IChecker> रजिस्टर करने के लिए कैसे
- 21. Asp.Net (नहीं MVC) में Autofac साथ HttpContextBase रजिस्टर करने के लिए कैसे
- 22. मैं एएसपी.नेट एमवीसी 3 नियंत्रक में ऑटोफैक कंटेनर का उपयोग कैसे करूं?
- 23. निनजेक
- 24. ऑटोफैक - बहु मॉड्यूल अनुप्रयोग में सही उपयोग
- 25. मैं एक प्रतिनिधि कारखाने को कैसे कार्यान्वित करूं?
- 26. MVC नियंत्रक इंजेक्शन एकीकरण
- 27. क्या मैं अपने प्रकार को यूनिटी में मॉड्यूल में पंजीकृत कर सकता हूं जैसे कि मैं ऑटोफैक में कर सकता हूं?
- 28. ऑटोफैक पैरामीटर रहित कन्स्ट्रक्टर चयन
- 29. हाइपोडर्मिक - ऑनएक्टिवेटिंग
- 30. स्ट्रक्चरमैप, ऑटोफैक, या निनजेक्ट, जो बड़े पैमाने पर वेब ऐप के लिए बहुत अच्छा है?
हम्म ... मेरी इच्छा है कि जब लोग डाउनवोट करेंगे तो लोग कुछ रचनात्मक आलोचना देंगे। –
मुझे भी! :) आपके उत्तर के लिए धन्यवाद - मैं आपके सुझावों पर एक नज़र डाल रहा हूं – UpTheCreek
हाय, मैं यहां सबकुछ समझता हूं कि Func <स्वामित्व> से इसका उपयोग क्यों करें - इसका उपयोग क्यों करें? क्यों न केवल मानक आइसियान में इंजेक्ट करें? मुझे यकीन नहीं है कि मैं वास्तव में समझता हूं कि func/स्वामित्व क्या करता है, लेकिन ऑटोफैक दस्तावेज़ के अनुसार, यदि आप इसका उपयोग करते हैं तो आपको ऑब्जेक्ट को मैन्युअल रूप से निपटाना होगा?
UpTheCreek
http://code.google.com/p/autofac/wiki/NewInV2 –