के तहत विंडसर में रेवेनडीबी सत्र का प्रबंधन मैं एमवीसी 4 प्रोजेक्ट में एनएस सर्विसबस (3.2.2), रावेनडीबी (1.2.2017-अस्थिर) और विंडसर (3.0.0.4001) का उपयोग कर रहा हूं।एनएस सर्विसबस
मैं एक IHandleMessages वर्ग कि 3 अलग संदेशों को संभालती है, और है कि इस तरह के रूप में एक IDocumentSession एक संपत्ति की जरूरत है, और इसलिए परिभाषित करता है:
public IDocumentSession DocumentSession { get; set; }
मैं NServiceBus 'website
से RavenDbUnitOfWork कार्यान्वयन कॉपी किया हैमैं इस प्रकार मेरी विंडसर कंटेनर में IDocumentStore, IDocumentSession और IManageUnitsOfWork पंजीकृत कर लिया है:
container.Register(
Component
.For<IManageUnitsOfWork>()
.ImplementedBy<RavenUnitOfWork>()
.LifestyleTransient()
);
container.Register(
Component
.For<IDocumentStore>()
.UsingFactoryMethod(k => DocumentStoreHolder.DocumentStore)
.LifestyleSingleton(),
Component
.For<IDocumentSession>()
.UsingFactoryMethod(k => k.Resolve<IDocumentStore>().OpenSession())
.LifestyleTransient()
);
NServiceBus मेरी कंटेनर का उपयोग कर कॉन्फ़िगर किया गया है:
Configure.With()
.CastleWindsorBuilder(container);
मैं समस्या यह है कि UnitOfWork और संदेश हैंडलर DocumentSession के विभिन्न उदाहरणों प्राप्त सामना कर रहा हूँ। इसका अर्थ यह है कि संदेश हैंडलर में सत्र में संग्रहीत ऑब्जेक्ट्स सहेजे नहीं जाते हैं, क्योंकि SaveChanges() को एक अलग दस्तावेज़ सत्र पर कॉल किया जाता है।
क्षणिक जीवनशैली को हटाने से विभिन्न प्रकार की समस्याएं होती हैं, जिसके परिणामस्वरूप रावेनडीबी से ऑब्जेक्ट्स अपडेट करते समय समेकन/संघर्ष होते हैं, क्योंकि (संभवतः) संदेश हैंडलर दस्तावेज़ सत्र का एक ही उदाहरण प्राप्त करता रहता है, जिसमें अद्यतन का कैश संस्करण होता है वस्तु।
अद्यतन:
के रूप में सुझाव दिया है, मैं, विंडसर में IDocumentSession के पंजीकरण को बदलने की कोशिश की है इस तरह घेरा जीवन शैली के लिए,:
Component
.For<IDocumentSession>()
.UsingFactoryMethod(k => k.Resolve<IDocumentStore>().OpenSession())
.LifestyleScope()
यह अपवाद जब कंटेनर की कोशिश करता का कारण बनता है एमवीसी नियंत्रक को हल करने के लिए, यह कहकर कि दायरा नहीं मिला था, और पूछ रहा था कि क्या मैं BeginScope() को कॉल करना भूल गया था।
आप परिभाषा DocumentStoreHolder को जोड़ सकते हैं? –