c# - 注册为 services.AddSingleton 但使用 using 块启动时如何处理资源
问题描述
我正在使用 .NET Core 3.1。
我有一个简单的发布类,其目的是将消息发布到消息代理。消息代理的所有逻辑都在一个单独的类库中,并且发布类本身需要以某种方式获得连接才能发布消息,所以它看起来像这样:
public class Publisher : IPublisher
{
public void Publish(string subject, PublishMessage message)
{
var options = ConnectionFactory.GetDefaultOptions();
using (var connection = new ConnectionFactory().CreateEncodedConnection(options))
{
connection.OnSerialize = jsonSerializer;
connection.Publish(subject, message);
connection.Flush();
}
}
}
顺便说一下new ConnectionFactory().CreateEncodedConnection(options)
,消息代理是原生的,所以这不是我写的包装器。
然而。在我的网络项目中,我像这样在 DI 中注册它:
services.AddSingleton<IPublisher, Publisher>();
我的最终目标是共享相同的连接,我知道当时机成熟时,DI 将处理所有可支配资源,但由于我将连接包装在 using 块中,它是否总是处理连接并为每条消息或创建一个新连接DI 设法以某种方式处理这个问题。如果没有,我该怎么做才能不为每条消息创建连接?
解决方案
services.AddSingleton<IPublisher, Publisher>();
应用程序启动时创建类的实例Publisher
,但每次调用Publish
方法时都会创建和释放连接。
推荐阅读
- python-3.x - TypeError:“Mul”Op 的输入“y”的类型为 float32,与参数“x”的类型 int32 不匹配
- python - 有什么方法可以使用 python 访问 DAYWISE Facebook 广告洞察并将响应数据添加到 mysql 数据库表中?
- sql - 在 SQL 中分隔具有相同属性的表
- authentication - socket.io 验证来自客户端每次发出的令牌
- spring - spring boot websocket代理设置最大连接数
- wix - WIX 安装程序 UI:图标/位图的工具提示
- javascript - what is the best way to select option when option is an object?
- javascript - Google 条形图 data.push 不是函数
- java - 为什么方法中输入的最后一个字符串首先被打印?
- regex - XML 模式的正则表达式