在 Web 请求中,我想使用 Microsoft HttpClient 调用另一台服务器。我使用 MVC4(托管在 IIS 中)和 caSTLe-windsor 作为 IOC 容器。我读到 HttpClient 被设计为在多次调用期间存在,我的问题是我应该如何实现它。
我提出了一些选择:
- 忽略 HttpClient 是为多次调用而设计的这一事实,并在每次需要时创建一个新的调用。
- 创建一个 Singleton(城堡中的生活方式)对象,用于在调用之间存储 HttpClient。这有什么风险吗?如果多个 Web 请求使用同一个 HTTP 客户端,性能会很差吗?
有没有更好的模式来做到这一点?
最佳答案
我会使用 LifestyleTransient
为每个请求创建一个新的。当您不确定该类是否可以作为单例运行时,这是最安全的。
依赖抽象(接口(interface))而不是直接依赖 HttpClient 也不是一个坏主意,除非您确定除了发出 HTTP 请求之外永远不会使用该类。即使如此,它也可能使单元测试变得更容易。这是使用 Windsor 或其他 DI 容器的一大好处。否则,与直接在类中实例化 HttpClient
相比并没有多大好处。
更新。我做了一些查找,发现this answer指示 HttpClient
应该为给定的 API 重用。它得到了高度的支持,我没有看到任何与经验(或其他)不同的意见,所以我将在进行一些近期开发时引用它。
我将通过定义一个实现接口(interface)的强类型客户端类来实现这一点,然后依赖于我的类中的接口(interface)(不是直接在客户端上)。然后 Windsor 可以为接口(interface)创建类并将其维护为一个单例。
关于c# - 使用 caSTLe-windsor 的 MVC4 中 HttpClient 的生活方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36828560/