我正在改编一个开源项目(nopcommerce)。它是一个伟大的软件,支持使用插件的可扩展性。
对于一个插件,我想向视图添加信息,为此,我想从控制器继承并覆盖需要更改的操作。
这是我的控制器:

public class MyController : OldController{
//stuff

public new ActionResult Product(int productId)
{
 //Somestuff
}

}

我从我的插件更改了路由,但是当调用此操作时,我会得到以下错误:
控制器类型上操作“product”的当前请求
“mycontroller”在以下操作方法之间不明确:
myplugin类型上的system.web.mvc.actionresult产品(int32)
oldcontroller类型上的system.web.mvc.actionresult产品(int32)
有什么方法可以覆盖这个方法吗?(注意:我不能使用override关键字,因为它在oldcontroller中没有标记为virtual、abstract或override)
谢谢,
奥斯卡

最佳答案

如果oldcontroller的方法很少,就这样重新声明。

public class MyController : Controller
{
    private OldController old = new OldController();

    // OldController method we want to "override"
    public ActionResult Product(int productid)
    {
        ...
        return View(...);
    }

    // Other OldController method for which we want the "inherited" behavior
    public ActionResult Method1(...)
    {
        return old.Method1(...);
    }
}

08-19 13:02