Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将参数传递给控制器构造函数?这样做对吗?_C#_Asp.net Mvc_Asp.net Mvc 4_Asp.net Mvc Routing - Fatal编程技术网

C# 如何将参数传递给控制器构造函数?这样做对吗?

C# 如何将参数传递给控制器构造函数?这样做对吗?,c#,asp.net-mvc,asp.net-mvc-4,asp.net-mvc-routing,C#,Asp.net Mvc,Asp.net Mvc 4,Asp.net Mvc Routing,我可能没有做到这一点,因为我是这个框架的新手,希望您能提供帮助^^ 正如您在下面的代码中所看到的,在每个操作中,我都会找到要更新的表,然后调用表中的方法 public class TableController : Controller { private Lobby L; public TableController() { L = Lobby.Instance; } public ActionResult Index(uint i

我可能没有做到这一点,因为我是这个框架的新手,希望您能提供帮助^^

正如您在下面的代码中所看到的,在每个操作中,我都会找到要更新的表,然后调用表中的方法

public class TableController : Controller
{
    private Lobby L;

    public TableController()
    {
        L = Lobby.Instance;

    }

    public ActionResult Index(uint id)
    {
        Table T = L.Tables[id];
        return View(T);
    }

    public ActionResult AddPlayer(byte pos, uint id)
    {
         Table T = L.Tables[id];

        ...
        T.AddPlayer(p, pos);
        ...
    }
 ...
}

但是我注意到我在每个方法中都做同样的事情,所以我想我可以将表转换为属性,这样我就不需要为每个操作找到它

我想要这样的东西:

public class TableController : Controller
{
    private Lobby L;
    private  Table T;


    public TableController(uint tableId)
    {
        L = Lobby.Instance;
        T = L.Tables[tableId];
    }

    public ActionResult Index()
    {
        return View(T);
    }

    public ActionResult AddPlayer(byte pos)
    {
        ...
        T.AddPlayer(p, pos);
        ...
    }
这种方法有什么错误吗

如果这在概念上是正确的,那么如何将表ID传递给构造函数? 这不起作用:(


通常,控制器构造函数用于注入依赖项,而不是数据。此外,在此阶段,
this。请求|响应|会话
以及其他基本属性仍然是
null

请尝试以下方法:

protected override void Initialize(RequestContext requestContext)
{
    var tableId = Convert.ToUInt32(requestContext.RouteData.GetRequiredString("tableId"));

    L = Lobby.Instance;
    T = L.Tables[tableId];

    base.Initialize(requestContext);
}

通常,控制器构造函数用于注入依赖项,而不是数据。此外,在此阶段,
this。请求|响应|会话
以及其他基本属性仍然是
null

请尝试以下方法:

protected override void Initialize(RequestContext requestContext)
{
    var tableId = Convert.ToUInt32(requestContext.RouteData.GetRequiredString("tableId"));

    L = Lobby.Instance;
    T = L.Tables[tableId];

    base.Initialize(requestContext);
}

将参数传递给操作,而不是控制器。 控制器将在每次请求发生时创建。 如果您一直需要静态属性,则可以使用它们。
可以从任何控制器或操作访问静态属性。

将参数传递给操作而不是控制器。 控制器将在每次请求发生时创建。 如果您一直需要静态属性,则可以使用它们。
静态属性可以从任何控制器或操作访问。

我宁愿创建将由所有控制器继承的BaseController,在BaseController上,您可以将属性和访问权限放在任何控制器上。。这将更清楚。。我宁愿创建将由所有控制器继承的BaseController,等等BaseController您可以从任何控制器放置您的属性和访问权限。这会更清楚。好的一点,大厅应该是静态的,因为我使用的是单体,因此访问始终是相同的大厅对象。谢谢!好的一点,大厅应该是静态的,因为我使用的是单体,因此访问始终是相同的大厅对象ct。谢谢!我怀疑这就是我想要的,让我在接受之前试一试。是的,这正是我想要做的!我怀疑这就是我想要的,让我在接受之前试一试。是的,它正是我想要做的!