在asp.net mvc中是否可以制作通用控制器?

Aar*_*mer 27 asp.net generics asp.net-mvc controller

我正在尝试创建一个通用控制器,即:

public class MyController<T> : Controller where T : SomeType
{ ... }
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试使用它时,我到处都遇到了这个错误......

控制器名称必须以"控制器"结尾

所以,我的问题,是否有可能在asp.net mvc中创建一个通用控制器?

谢谢!

Jef*_*itz 37

如果我理解你正确,你想要做的是通过类型T的通用控制器路由给定模型的所有请求.

您希望T根据所要求的型号而变化.

/Product/Index想要触发MyController<Product>.Index()

这可以通过编写自己IControllerFactoryCreateController方法并实现如下方法来实现:

public IController CreateController(RequestContext requestContext, string controllerName)
{
    Type controllerType = Type.GetType("MyController")
                              .MakeGenericType(Type.GetType(controllerName));
    return Activator.CreateInstance(controllerType) as IController;
}
Run Code Online (Sandbox Code Playgroud)


Iai*_*der 9

是的,你可以,没关系,我自己也经常使用它们.

您需要确保的是,当您从MyController继承时,您仍然使用控制器结束类型名称:

public class FooController :  MyController<Foo>
{ 
 ...
}
Run Code Online (Sandbox Code Playgroud)

  • 你让我今天一整天都感觉很好!这非常有帮助。谢谢。 (2认同)