Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.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/17.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# 单例中的ASP.NET事件处理_C#_Asp.net Mvc_Events_Event Handling_Signalr - Fatal编程技术网

C# 单例中的ASP.NET事件处理

C# 单例中的ASP.NET事件处理,c#,asp.net-mvc,events,event-handling,signalr,C#,Asp.net Mvc,Events,Event Handling,Signalr,我正在使用ASP.NET MVC4和Signal创建web应用程序。 我试图为一些游戏类创建存储库。 此外,我想在每次添加项目时触发事件 C# 并且处理程序在其控制器中声明: void Repository_OnAddItem(object sender, EventArgs e) { IHubContext hubContext = GlobalHost.ConnectionManager.GetHubContext<SPSHub>(); h

我正在使用ASP.NET MVC4和Signal创建web应用程序。 我试图为一些游戏类创建存储库。 此外,我想在每次添加项目时触发事件

C#

并且处理程序在其控制器中声明:

void Repository_OnAddItem(object sender, EventArgs e)
    {
        IHubContext hubContext = GlobalHost.ConnectionManager.GetHubContext<SPSHub>();
        hubContext.Clients.All.addItem();
    }
void Repository\u OnAddItem(对象发送方,事件参数e)
{
IHubContext hubContext=GlobalHost.ConnectionManager.GetHubContext();
hubContext.Clients.All.addItem();
}
但是,每次我将项目添加到存储库时,都会添加新的相同处理程序并使事件处理倍增。

多亏了:


“是的,它将是一个不同的处理程序,因为每个请求都会创建和使用一个新的控制器实例。但是,您可以将该方法设置为静态方法或将其移动到其他单例对象中。这将解决您的问题,并且您也不必在每次向存储库添加项目时都添加该处理程序。”(这对我来说似乎很奇怪),你会在某种启动方法中添加一次。”

因为你的存储库是一个单实例,你不能只添加一次事件处理程序吗,例如在应用程序启动时?最近,如果我(或其他开发人员)如果要向此事件动态添加更多处理程序,我应该如何继续?在这种情况下,您将添加新的事件处理程序。但是,我对此进行了评论,因为我感觉您每次向存储添加项目时都在添加事件处理程序抱歉,如果我不清楚,我的问题是删除处理程序,而不是使用添加它们。因为它无法删除现有的(和相同的)处理程序,这会导致多次重新添加相同的处理程序。我还尝试在存储库构造函数中实现添加处理程序,但出现了一些神秘的错误,这不是本文讨论的对象。可能会有所帮助
Repository.Instance.OnAddItem += Repository_OnAddItem;
Repository.Instance.Add(game);
void Repository_OnAddItem(object sender, EventArgs e)
    {
        IHubContext hubContext = GlobalHost.ConnectionManager.GetHubContext<SPSHub>();
        hubContext.Clients.All.addItem();
    }