c# - 如何在 ASP.NET Core 中保持对象存活?

标签 c# asp.net-core-mvc signalr

我有一个 .NET Core MVC 应用程序 (C#),它使用 C++ 库 (SWIG)。在 C# 中,我需要创建其中一个类的实例,预设其回调并在服务器运行时使其保持事件状态。使用此回调,我从 C++ 获取数据。我试图将对象存储在 session 中,但我只能在其中存储值:

HttpContext.Session.Set(key, value);

也尝试在 Startup 上定义它,但该对象在初始化后被释放。在这种情况下最好的解决方案是什么?

注意:在回调函数中,我使用 SignalR 发布数据。

最佳答案

由于您使用的是 ASP.NET Core,因此请使用内置的服务管理器。

public void ConfigureServices(IServiceCollection services)
{
    services.AddSingleton<SwiggStuff>();
}

要稍后获得该服务,请使用 RequestServicesHttpContext .

HttpContext.RequestServices.GetService<SwiggStuff>();

更好的是,制作 SwiggStuff实现 ISwiggStuff并使用 AddSingleton<ISwiggStuff, SwiggStuff>() 注册它然后使用 GetService<ISwiggStuff>() 获取它.这允许注入(inject) FakeSwiggStuff当您进行单元测试时。

关于c# - 如何在 ASP.NET Core 中保持对象存活?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49509333/

相关文章:

SignalR 与服务器发送事件 HTML 5

c# - 这可能是 : c# collection of Type with constrains, 还是通用类型的集合?

c# - C# 规范是否禁止基于默认参数的类型推断?

c# - IEnumerable<List<T>> 到 List<T>

enums - 使用 MVC6 Tag Helpers 的 Enum 带有单独标签的单选按钮

asp.net - 为什么 IFormFile 显示为 null,如何修复它?

c# - 在 asp.net core mvc 中创建实体列表

c# - 如何向控制台应用程序提供密码?

asp.net-core - 向使用 "Identity as UI"的 Web 应用验证 .NET Core 2.1 SignalR 控制台客户端

azure - WebSocket 握手期间来自 Azure SignalR Hub 的 NullReferenceException