सबसे पहले, मेरे पास एक dbcontext फैक्ट्री है जिसे public class DatabaseFactory : Disposable, IDatabaseFactory
परिभाषित किया गया है और यह केवल एक संदर्भ बनाता है यदि कोई पहले से मौजूद नहीं है।एकाधिक भंडारों और निनजेक्ट का उपयोग करके काम की इकाई के लिए एक कारखाना उदाहरण इंजेक्ट कैसे करें?
अगला, मेरे पास एक सामान्य भंडार है जिसे public class Repository<T> : IRepository<T> where T : class
परिभाषित किया गया है जो कारखाने को निर्माता में ले जाता है। मेरे पास अन्य ठोस भंडार हैं जो इस से प्राप्त होते हैं।
मेरे पास वर्क क्लास की एक इकाई भी है जिसे public class UnitOfWork : IUnitOfWork
परिभाषित किया गया है जो कारखाने को कंस्ट्रक्टर में ले जाता है और कारखाने के अंदर संदर्भ में सभी परिवर्तनों को बचाता है (जो सभी भंडारों का उपयोग किया जाना चाहिए)।
मेरे नियंत्रक में, मेरे पास public ProjectController(IDatabaseFactory factory, IUnitOfWork unitOfWork, IProjectRepository projectRep, IUserRepository userRep)
के रूप में निर्माता का सेट है।
असल में, मुझे कारखाने का एक ही उदाहरण काम की इकाई और सभी भंडारों में पारित करने की आवश्यकता है। निंजा के साथ, यह प्रत्येक ऑब्जेक्ट के लिए एक नया कारखाना बनाता है, ताकि वे सभी को एक उदाहरण दे सकें। क्या केवल एक उदाहरण को निंजा के माध्यम से पारित करने की अनुमति देने का कोई तरीका है या क्या मैं अपना कारखाना सही ढंग से नहीं बना रहा हूं और/या सही ढंग से निचोड़ नहीं समझ रहा हूं?
यहाँ Ninject में मेरे बाइंडिंग हैं:
kernel.Bind<IProjectRepository>().To<ProjectRepository>();
kernel.Bind<IIssueRepository>().To<IssueRepository>();
kernel.Bind<IUserRepository>().To<UserRepository>();
kernel.Bind<IDatabaseFactory>().To<DatabaseFactory>();
kernel.Bind<IUnitOfWork>().To<UnitOfWork>();
वास्तव में? मैंने पिछले साढ़े सालों से उस जवाब की तलाश करने की कोशिश की। यह वहीं है जिसे मैं ढूंढ रहा था। मुझे नहीं पता कि Google के माध्यम से यह जवाब क्यों मुश्किल था। शायद मैं इसे जितना मुश्किल था उससे ज्यादा कठिन बनाने की कोशिश कर रहा था। एक बार फिर धन्यवाद! – snoluet
यदि आपको मेरी पोस्ट उपयोगी मिलती है तो आप इसे उत्तर के रूप में स्वीकार कर सकते हैं :) – MonkeyCoder
मैं करूंगा - आपने इसे बहुत जल्दी उत्तर दिया और अब मुझे 4 मिनट का इंतजार करना है :) धन्यवाद। यदि आपके पास दूसरा है, तो त्वरित प्रश्न यदि मैं कारखाना को सिंगलटन के रूप में रखता हूं - क्या यह एक एकल इंस्टेंस एप्लिकेशन को विस्तृत करेगा या केवल वर्तमान नियंत्रक के भीतर होगा? अगर मैं प्रोजेक्ट कंट्रोलर की तुलना में इश्यु कंट्रोलर के लिए कारखाने का एक अलग उदाहरण चाहता हूं (लेकिन उस विशिष्ट नियंत्रक के भीतर इसका एक उदाहरण), तो मेरे लिए इसका ख्याल रखेगा? – snoluet