在 Blazor Server 中,为什么我的 API 控制器每次调用都不同,即使将其添加为单一实例也是如此?

In Blazor server, why is my API controller different every call even when it is added as a singleton?

提问人:MyProgramSucks 提问时间:11/2/2023 最后编辑:Brian Tompsett - 汤莱恩MyProgramSucks 更新时间:11/2/2023 访问量:23

问:

我通过添加控制器接口在 Program.cs 文件中配置了我的应用程序,如下所示:

builder.Services.AddSingleton<Interface, Class>();

然而,每当有一条通往我的控制器的路由时,它实现了该类,就会调用构造函数并使用上一个类中的新控制器?我已经能够通过使它们保持静态来保持属性相同,但我想知道是否有办法防止这种情况发生?basecontroller

作为第二个问题,我读过一篇关于通过防止多个实例使类线程安全的文章,我认为我可能能够做到这一点,但这要求我的类有一个空的私有构造函数,这将阻止我访问已在 Program.cs 中注册的其他类,并且我也无法将类注册到 Program.cs,因为您需要一个公共构造函数来做所以。在本主题中,任何文章链接/解释都值得赞赏。

C# 单一实例 blazor-server-side

评论

0赞 Franz Gleichmann 11/2/2023
没有任何关于您的代码或软件结构的信息,我们只能猜测......但我的猜测是:如果你的控制器的生命周期对你的程序有任何重大影响,那就太可疑了。想解释一下为什么你需要他们是单身的吗?任何需要以任何方式重用的数据都应该存储在其他地方并注入到控制器中。(另外:请 - 每个问题只有一个问题
0赞 MyProgramSucks 11/2/2023
@FranzGleichmann 这是一个机器人解决方案,我构建的程序是 HMI 和机器人之间的中间人。因此,如果发出某个 get 请求,那么我将移动机器人 x 数量等。我们还有另一个充当心跳的 get 请求,它每隔几秒钟就会被调用一次。在此心跳中,我检查另一个类的布尔值,以查看机器人是否仍处于连接状态,该类正在不断ping机器人。如果该布尔值关闭,则我会调用以在心跳中重新连接机器人。您在这里推荐什么模式?

答: 暂无答案