Asp.net mvc MVC POCO控制器和fluent路由

Asp.net mvc MVC POCO控制器和fluent路由,asp.net-mvc,asp.net-mvc-routing,poco,fluent-interface,Asp.net Mvc,Asp.net Mvc Routing,Poco,Fluent Interface,是否有将POCO概念应用于控制器的MVC框架 示例: 假设我不想让我的控制器依赖于任何web框架,我不再需要从框架控制器类继承 相反,我只想用一些规则指定路由,描述如何将请求映射到我的POCO控制器类实例的方法和参数 也许下面的小例子可以更好地解释它。 想象一下我们可以有这样的路由: routes.MapPOCOController<MyPOCO>("MyWebAppName/{method}/{*parameters}", () => _container.Resolve&l

是否有将POCO概念应用于控制器的MVC框架

示例:
假设我不想让我的控制器依赖于任何web框架,我不再需要从框架控制器类继承
相反,我只想用一些规则指定路由,描述如何将请求映射到我的POCO控制器类实例的方法和参数

也许下面的小例子可以更好地解释它。
想象一下我们可以有这样的路由:

routes.MapPOCOController<MyPOCO>("MyWebAppName/{method}/{*parameters}", () => _container.Resolve<MyPOCO>());
routes.IfMethodReturns<MyCustomRedirectResult>().PerformRedirect(result => result.Url);
  • 在第一种方法中,“GetUser”JSON序列化可以像mvc4一样自动进行
  • 在第二种方法“Home”中,我们需要将视图手动呈现为字符串,因此这将为您提供更大的灵活性,比如组合不同的引擎或以比当前asp.mvc实现更自然的方式编写自定义引擎
  • 在第三种方法“RenderSomePageOrRedirect”中,我们对当前的RedirectResult实现并不严格,可以使用任何可以工作的类,然后在routes中正确地映射它
是否有任何框架已经实现了上述概念中的至少一个。。。也许是“contrib”图书馆

我寻找此类功能的原因是:

  • 我想遵循DRY原则,不想将请求/响应映射代码与控制器中的业务逻辑混为一谈(我所知道的当前mvc实现不能两者兼而有之)
  • 我想让我的控制器类在多个上下文中都可用,这样,单元测试、重用等就更容易了。(当您在不同的web应用程序中重用相同的控制器时,代码会变得更加枯燥:您只需要稍微调整一下路由)
  • 这只是一种直觉,这种做事方式更好,对不起,我放弃了(

附言:我对人们的感激之情(尤其是脱衣舞战士)谁在下面发表了评论并帮助我正确地提出了这个问题!

如果没有这样的框架,ASP.NET MVC控制器必须派生自
控制器
异步控制器
ApiController
类。因此,我想如果你想实现这些概念,你必须编写自己的MVC框架。

事实上确实有。这似乎与您所要寻找的差不多。唯一的问题是缺少文档。

如果没有与web服务器交互的框架,您将如何承载控制器等?那么您想创建自己的MVC框架吗?@ILICH:我想说,框架引用的适当抽象的业务层ork控制器和一些明智的路由可以解决您的问题,而无需重新发明一个合理可靠的轮子。@ILICH:您能提供一个代码示例来说明您希望这样一个控制器如何工作吗?例如,如果您希望您的控制器兼作服务,它的操作将返回什么类型的对象?这些对象将如何工作et是在MVC模式还是服务模式下呈现的?我认为这个问题背后的想法有一些优点,但就目前情况而言,您没有足够详细地解释您的意图,从而给出一个像样的答案。@ILICH:这还不足以充实您的问题。
MyService
会是什么样子?它的操作会返回什么样的结果?您希望
MyService
有效地兼作控制器和服务,对吗?如果是这样,将对其方法的返回类型执行什么样的转换,以使它们在视图中呈现?如果您希望其他人认真对待您的问题,您需要表明您已经认真考虑了它。
public class MyPOCO {
    public User     GetUser(Guid userId) {...}
    public string   Home() { 
        return _razorEngine.Render("~/Views/Home/Index.cshtml", new HomeModel { Message = "Hello world!"});
    }
    public object   RenderSomePageOrRedirect()
    {
        if(blabla)
            return new MyCustomRedirectResult("/profile");
        else
            return _razorEngine.Render( ... );
    }
    ...
}