डिफ़ॉल्ट रूप से आप ControllerContext.Controller
के साथ या ViewContext.Context
के साथ एक नियंत्रक के अंदर केवल Controller
तक पहुंच सकते हैं। किसी वर्ग से इसे एक्सेस करने के लिए आपको एक कस्टम ControllerFactory
लागू करने की आवश्यकता है जो नियंत्रक उदाहरण को कहीं और संग्रहीत करता है और इसे वहां से पुनर्प्राप्त करता है। उदाहरण में Request.Items
:
public class MyControllerFactory : DefaultControllerFactory
{
public override IController CreateController(RequestContext requestContext, string controllerName)
{
var controller = base.CreateController(requestContext, controllerName);
HttpContext.Current.Items["controllerInstance"] = controller;
return controller;
}
}
तो आप इसे अपने Application_Start
में रजिस्टर:
ControllerBuilder.Current.SetControllerFactory(new MyControllerFactory());
और तुम नियंत्रक उदाहरण बाद में प्राप्त कर सकते हैं:
public class SomeClass
{
public SomeClass()
{
var controller = (IController)HttpContext.Current.Items["controllerInstance"];
}
}
लेकिन मैं कुछ दूसरे तरीके से मिलेगा इस "हैकी" वर्कअराउंड की बजाय मेरी कक्षा में नियंत्रक उदाहरण पास करने के लिए।
कहां? एक मॉडल में? एक विचार में? बेशक यदि आप किसी कार्रवाई में हैं तो आप इसका उपयोग अपने नियंत्रक के संदर्भ में कर सकते हैं, लेकिन मुझे लगता है कि यह मामला नहीं है :)। कुछ वर्गों में – BigMike
(किसी कार्रवाई में नहीं और दृश्य में नहीं) – Alexandre
चूंकि एमवीसी पैटर्न में आप एक क्रिया में रहना चाहते हैं, जब तक कि आप कुछ डेटा मॉडल के विधि प्रवाह या कुछ सहायक में न हों। बस शून्य संदर्भों से बचने के लिए मैं नियंत्रक के लिए अपनी कक्षा विधि में एक पैरामीटर जोड़ूंगा, और उसके बाद प्रवाह शुरू होता है और इसे पास करता हूं। – BigMike