2011-10-04 10 views
10

मैं एक ऐसी लाइब्रेरी विकसित कर रहा हूं जो मेरी कंपनी के लिए आंतरिक वितरित की जाती है और विभिन्न प्रकार के अनुप्रयोगों द्वारा खपत की जाती है। यह पुस्तकालय प्लेटफॉर्म अज्ञेयवादी होना चाहिए जिसमें इसे किसी वेब संदर्भ में या कंसोल ऐप के भीतर भी तैनात किया जा सकता है। मैं इस ढांचे का उपभोग करने वाले आवेदन के संदर्भ के आधार पर प्रति-http-request या per-thread होने के लिए वस्तुओं को पंजीकृत करना चाहता हूं। स्ट्रक्चर मैप में, मैं हाइब्रिड जीवनकाल का उपयोग करके ऐसा कर सकता हूं। अनिवार्य रूप से, यदि कोई HttpContext मौजूद है तो ऑब्जेक्ट उस पर स्कॉप्ड किया जाएगा, अन्यथा ThreadLocalStorage प्रति-थ्रेड आधार पर उपयोग किया जाएगा। वितरित पुस्तकालय या उपभोग करने वाले एप्लिकेशन के लिए कोई अतिरिक्त कॉन्फ़िगरेशन आवश्यक नहीं है। क्या यह ऑटोफैक का उपयोग कर संभव है? डेवलपर कौशल स्तर की हमारी व्यापक विविधता को देखते हुए, हमारा लक्ष्य उपभोक्ताओं के लिए किसी विशेष कॉन्फ़िगरेशन को कम/समाप्त करना है।स्वचालित रूप से प्रति-थ्रेड या प्रति-अनुरोध लाइफटाइम स्कोप्स का चयन करें

मुझे समझ में पंजीकरण नास्तिक संदर्भ InstancePerLifetimeScope जीवन भर का उपयोग कर, लेकिन फिर लेने अनुप्रयोगों क्रम HTTP अनुरोध से InstancePerLifetimeScope पंजीकरण बाध्य करने में ASP.NET/WCF/MVC एकीकरण बाइनरी का उपभोग करने के लिए आवश्यक हैं हो सकता है। या, प्रति-थ्रेड स्कोप के लिए, उपभोक्ता कोड को lifetime scope per thread बनाने की ज़िम्मेदारी की आवश्यकता होती है।

कोई सुझाव?

+0

ऑटोफैक अनुकूलित जीवनकाल का समर्थन करता है, क्या आप स्ट्रक्चर मैप के 'हाइब्रिड' जीवनकाल को इस तरह अनुकरण नहीं कर सकते? – neontapir

उत्तर

3

अपने जीवनकाल प्रबंधक को कार्यान्वित करना आसान है जो 'HttpContext.Current! = Null' को जांचता है और फिर मौजूदा प्रबंधकों में से एक को प्रतिनिधि करता है।

हालांकि मैं सुझाव दूंगा कि प्रत्येक एप्लिकेशन उचित प्रबंधक को तार देगा। एक उदाहरण एक यूनिट टेस्ट परिदृश्य होगा जहां 'HttpContext' मौजूद नहीं हो सकता है क्योंकि यह मजाक कर रहा है कि आप परीक्षण विशिष्ट उद्देश्यों के लिए मैन्युअल रूप से जीवनकाल को नियंत्रित करना चाहते हैं।

+0

क्या आप कस्टम आजीवन प्रबंधक का उदाहरण दे सकते हैं? –

+1

https://github.com/autofac/Autofac/blob/4c5f4ca554137f184cb705035011c3a0261c1128/Core/Source/Autofac.Integration.Mvc/RequestLifetimeScopeProvider.cs –

संबंधित मुद्दे