यह asp.net mvc generic controller का डुप्लिकेट जो वास्तव में सही होता है जवाब। जेफ फ़्रिट्ज़ का जवाब बिल्कुल सही नहीं है। अपने स्वयं के IControllerFactory को बनाना ExpressionHelper.GetRouteValuesFromExpression में सीमा को पार नहीं करेगा जो आप देख रहे त्रुटि उत्पन्न कर रहा है। जब भी आप RedirectToAction, BuildUrlFromExpression, ActionLink, RenderAction, BeginForm, किसी भी विधि को कॉल करते हैं, तो अपने स्वयं के IControllerFactory को कार्यान्वित करने से आपको त्रुटियों के साथ छोड़ दिया जाएगा।
मेरे लिए दिलचस्प क्या है, यह है कि माइक्रोसॉफ्ट के "सम्मेलन द्वारा प्रतिबंध" पहले से ही बाधा द्वारा लागू किया गया है, जहां ExpressCelper.GetRouteValuesFromExpression विधि में टाइप किया गया है, जहां टीकंट्रोलर: कंट्रोलर "है।
string controllerName = typeof(TController).Name;
if (!controllerName.EndsWith("Controller", StringComparison.OrdinalIgnoreCase)) {
throw new ArgumentException(MvcResources.ExpressionHelper_TargetMustEndInController, "action");
}
जब तक यह "नियंत्रक" में एक वर्ग के समाप्त होने के द्वारा विरासत में मिली है, क्योंकि typeof (AnyGeneric) .Name "नियंत्रक" के साथ समाप्त कभी नहीं होगा: नहीं जेनेरिक कभी सम्मेलन मान्यता को संतुष्ट करेगा।
आप इस माध्यम से क्या हासिल करने की कोशिश कर रहे हैं? जब MyController को तुरंत चालू किया जाता है तो उसे यह पता होना चाहिए कि टी क्या है, या तो सबक्लास या उसके निर्माता के माध्यम से। यदि आप गतिशील रूप से ऐसा करना चाहते हैं तो आपको एक नियंत्रक फैक्टरी – roryf