2012-04-23 15 views
18

के साथ निनजेक्ट का उपयोग करना विंडोज सेवा के साथ निनजेक्ट का उपयोग करने के किसी भी अच्छे उदाहरण? मुझे यकीन नहीं है कि मुझे क्या एक्सटेंशन चाहिए। साथ ही, सुनिश्चित नहीं है कि संरचना रूट क्या होना चाहिए? वहां विंडोज़ सेवा के साथ निनजेक्ट का उपयोग करने के किसी भी अच्छे उदाहरण हैं?विंडोज सेवा

उत्तर

19

निर्भरता इंजेक्शन के संबंध में एक विंडोज सेवा नियमित कमांड लाइन एप्लिकेशन से अधिक भिन्न नहीं होती है। सीधी-आगे संरचना रूट आपकी Main विधि है।

जिस तरह से मैंने आमतौर पर इसे किया है, वहां एक मॉड्यूल के साथ StandardKernel बना है जिसमें मेरी निर्भरता हल हो जाती है। फिर शीर्ष स्तर निर्भरता को हल करने kernel.Get का उपयोग करें - सब कुछ वहाँ से पालन करेंगे:

static void Main(string[] args) 
{ 
    var kernel = new StandardKernel(new FooModule()); 
    var barDependency = kernel.Get<Bar>(); 

    System.ServiceProcess.ServiceBase[] ServicesToRun; 
    ServicesToRun = new ServiceBase[] { new FooService(barDependency) }; 
    System.ServiceProcess.ServiceBase.Run(ServicesToRun); 
} 
+1

क्या माइक्रोसॉफ्ट के पास निंजा मॉड्यूल (या कर्नेल) को इंजेक्ट करने का कोई तरीका है, इसलिए आपको कोई भी सेवा ढूंढने की ज़रूरत नहीं है? (केवल कुछ निर्भरता के लिए एक बड़ा सौदा नहीं - केवल उत्सुक) –

+0

नहीं। ऐसा नहीं है कि आप कंसोल ऐप की तरह शुरू कर रहे हैं। यदि आपको ऐसा करने की ज़रूरत है, तो आप अपनी सेवा बनाने के लिए एक अमूर्त फैक्ट्री (या फैक्ट्री विधि) पैटर्न दृष्टिकोण ले सकते हैं। –

+0

दान, मुख्य विधि प्रारंभिक बिंदु है। वेब अनुप्रयोगों के लिए समाधान आदि वास्तव में कामकाज हैं क्योंकि एक वेब अनुप्रयोग में एक अच्छा प्रारंभिक बिंदु नहीं है। –

1

TopShelf साथ Ninject का उपयोग करना .. चलाने बनाम स्थापित (शुरू) मैं एक अजीब मुद्दा जहां > MyService.exe run कोड के साथ ठीक काम करता है का सामना करना पड़ा Kernel.Bind(handlers => { var bindings = handlers.From("abc.dll") ... }

लेकिन जब मैं > MyService.exe install

का उपयोग कर इसे बाइंडिंग Ninject विधानसभा स्कैनिंग में उल्लेख किया हल नहीं कर सका स्थापित करने के बाद सेवा शुरू करते हैं।

मेरे सिर तोड़ने के कुछ ही घंटों के बाद ...

बदलते .From(...).FromAssembliesMatching(...) को मैं सेवा सफलतापूर्वक शुरू कर सकता है।

उम्मीद है कि यह किसी की मदद करेगा।