मैं एक कस्टम StructureMap नियंत्रक कारखाने के साथ एक ASP.NET MVC 2 आवेदन मेरी नियंत्रकों के लिए निर्भरता इंजेक्शन संभाल करने के लिए है कैसे निपटेंगे:मैं एक ASP.NET MVC नियंत्रक कारखाने में एक अपवाद
public class StructureMapControllerFactory : DefaultControllerFactory
{
public override IController CreateController(RequestContext context, string controllerName)
{
Type controllerType = base.GetControllerType(context, controllerName);
return ObjectFactory.GetInstance(controllerType) as IController;
}
}
मैं चाहूँगा यह जानने के लिए कि मैं इस नियंत्रक फैक्ट्री में अपवादों को कैसे संभाल सकता हूं ताकि उन्हें ~/Views/Shared/error.aspx पर रीडायरेक्ट किया जा सके, जैसे वे हैंडलरर विशेषता वाले नियंत्रक में हैं। कस्टम अपरर्स विशेषता "चालू" पर सेट होने के बावजूद वर्तमान में अपवाद ऐसा नहीं करते हैं।
फिलहाल मैं "~/doesNotExist/edit/1" जैसे यूआरएल का उपयोग करके ऐसा अपवाद उत्पन्न कर सकता हूं। डिफ़ॉल्ट मार्ग के साथ:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
MVC इस मार्ग से मेल खाता है और मेरी नियंत्रक कारखाने के लिए नियंत्रक का नाम "DoesNotExist" गुजरता है। GetControllerType तब शून्य देता है और StructureMap पर कॉल में एक शून्य संदर्भ अपवाद का कारण बनता है। मैं फिर इस अपवाद को संभालने में सक्षम होना पसंद करूंगा।
ध्यान दें कि बाद में सभी मार्गों को जोड़ने से इस समस्या का समाधान नहीं होगा - एमवीसी डिफ़ॉल्ट मार्ग से मेल खाता है।
मुझे पता है कि मैं नियंत्रक के लिए डिफ़ॉल्ट मार्ग पर बाधा डालकर इस विशेष समस्या को हल कर सकता हूं लेकिन सवाल यह है कि मैं कारखाने में सामान्य एमवीसी ~/व्यू/साझा/Error.aspx का उपयोग कैसे कर सकता हूं।
ध्यान दें कि मैं नहीं चाहता कि उत्तर विशेष एमवीसी अनुप्रयोग में नियंत्रक फैक्ट्री के तंग युग्मन की आवश्यकता हो। आदर्श रूप से यह कारखाना एक संदर्भित असेंबली में होना चाहिए जो एक ही समाधान में नहीं है।
हाँ, उस पर मुझे इंगित करने के लिए धन्यवाद - समस्या का एक बहुत अच्छा समाधान। –