You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

依赖注入是否会自动处置注册代码中的BlobContainerClient对象?

问题解答

首先直接给结论:你手动创建的BlobContainerClient不会被ASP.NET Core的DI容器自动处置,原因如下:

  • ASP.NET Core DI仅会自动处置那些由容器自身创建并纳入生命周期管理的对象。你这里是直接通过new BlobContainerClient(...)手动实例化的对象,DI容器完全不知道它的存在,自然不会负责其销毁与资源释放。
  • 至于它是否会被间接处置,完全取决于EventProcessorClient的内部实现:如果EventProcessorClient的Dispose方法中会调用传入的BlobContainerClient的Dispose,那它会随EventProcessorClient的销毁被间接释放;但如果EventProcessorClient没有做这个逻辑,这个BlobContainerClient就会成为潜在的资源泄漏点。

推荐的修正做法

既然BlobContainerClient是线程安全的(Azure SDK官方明确说明),更合理的方式是把它注册为Singleton生命周期的服务,再由DI注入给EventProcessorClient,示例代码如下:

// 先注册BlobContainerClient为Singleton
services.TryAddSingleton<BlobContainerClient>(_ => 
    new BlobContainerClient("connectionString", "containerName"));

// 再注册EventProcessorClient,让DI注入BlobContainerClient
services.TryAddScoped<EventProcessorClient>(p =>
{
    var storageClient = p.GetRequiredService<BlobContainerClient>();
    var connectionParam = p.GetRequiredService<IOptions<EventHubSettings>>();
    return new EventProcessorClient(storageClient, connectionParam.Value.SomeValue,
        connectionParam.Value.SomeValue);
});

这样既符合DI的生命周期管理规范,也能确保BlobContainerClient被正确处置,同时还能复用单实例提升性能。

内容的提问来源于stack exchange,提问作者akshay_zz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 22:35:15