C# 通过依赖项注入在应用程序生命周期中保持CloudBlobClient的活动状态

C# 通过依赖项注入在应用程序生命周期中保持CloudBlobClient的活动状态,c#,azure,dependency-injection,C#,Azure,Dependency Injection,我想将CloudBlobContainer实例“container”注入到我的自定义类中 问题是生命。我可以为每个Web请求或作为一个单例执行,因为当应用程序运行时,客户端永远不会更改 我的问题是,我是否应该因为blobClient保持一种开放连接而期望出现问题 CloudStorageAccount storageAccount = CloudStorageAccount.Parse( ConfigurationManager.AppSettings["MyDataStorageConnect

我想将CloudBlobContainer实例“container”注入到我的自定义类中

问题是生命。我可以为每个Web请求或作为一个单例执行,因为当应用程序运行时,客户端永远不会更改

我的问题是,我是否应该因为blobClient保持一种开放连接而期望出现问题

CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
ConfigurationManager.AppSettings["MyDataStorageConnectionString"]
);

CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference("mydata");

IIRC,Azure SDK为您提供了一个面向对象的API,可以保护您免受通信细节的影响。您与Azure存储服务通信的方式是通过HTTP(它们是),因此保持
CloudBlobContainer
对象的存在不会保持连接打开

在web应用程序的生命周期中,我从未遇到过保存
CloudBlobContainer
对象的问题


但是,根据实例成员不保证是线程安全的,所以为了安全起见,您应该考虑每个Web请求具有一个实例。

在创建容器时添加一个工厂,将容器放在该工厂中的一个懒惰者中,并将其作为单体注入。您可能需要在容器周围创建一个适配器(包装器)……这不是我问题的答案。您是否认为下面的代码行
CloudBlobClient blobClient=storageAccount.CreateCloudBlobClient()打开到Azure存储帐户的网络连接?@Elisabeth当然不是,这就是它作为注释驻留的原因@Callumlington谢谢你的提示。是的,我需要创建一个包装器,因为容器无法更新…;-)但是保持实例比http请求长并不能使实例更线程安全,对吗?因此,实际上应用程序的生命周期应该是安全的。哦,不,我完全阅读了你发布的文章/文档。我看不出那些HTTP请求不应该是线程安全的,但是我还没有看到源代码,所以我不能保证任何事情。