2

ASP.NET vNext 概述说您可以通过注入来创建 POCO 控制器IActionResultHelper

public class HomeController
{
    // Helpers can be dependency injected into the controller
    public HomeController(IActionResultHelper resultHelper)
    {
        Result = resultHelper;
    }

    private IActionResultHelper Result { get; set; }

    public ActionResult Index()
    {
        return Result.Json(new { message = "Poco controllers!" });
    }
}

我正在尝试实现这一点,但是,我找不到这个接口。似乎不再源代码中。

当前创建 POCO 控制器的正确方法是什么?

4

2 回答 2

1

截至 2014-10-06 Visual Studio 14 的 CTP 版本,注入服务的方式为:

public class HomeController
{
    // Use the ActivateAttribute to inject services into your controller
    [Activate]
    public ViewDataDictionary ViewData { get; set; }

    public ActionResult Index()
    {
        return new ViewResult() { ViewData = ViewData };
    }
}

资料来源:ASP.NET MVC 6 入门 - Mike Wasson,asp.net

于 2014-10-29T10:57:24.007 回答
1

是的,这段代码大约在一个月前被删除了,看起来他们正在使用不同的基于属性的方法来创建 POCO 控制器。没有 IActionResultHelper,您只需创建新的 ActionResult 实例...

如果您查看这些问题,您就会对正在发生的事情有所了解。

https://github.com/aspnet/Mvc/issues/316 https://github.com/aspnet/Mvc/issues/597 https://github.com/aspnet/Mvc/issues/617

POCO 控制器中似乎使用了一个新的 [Activate] 属性。请参阅此示例。

https://github.com/aspnet/Mvc/blob/dev/samples/MvcSample.Web/Home2Controller.cs

还有这个样本

https://github.com/aspnet/Mvc/blob/dev/samples/MvcSample.Web/SimplePocoController.cs

显然,新的 DefaultControllerFactory 要求 POCO 在控制器的命名中仍然使用 Controller 后缀,但是如果控制器派生自 Controller 类,您可以将其命名为任何名称。

于 2014-07-25T18:19:28.767 回答