【发布时间】:2016-11-20 13:27:54
【问题描述】:
我正在为我的 Web 应用程序与之通信的每个不同 API 创建一个 HttpClient 实例。
我想使用 SimpleInjector 的依赖注入将 HttpClient 注入业务类。例如,我有ITwitterBusiness 和IInstagramBusiness,它们都在构造函数中接受HttpClient。
在使用依赖注入注册多个相同类型的对象时,最佳实践是什么?
我很确定问题的一部分可能是我的设计,但这里有一些想法。
我的第一个想法是在 DI 注册中使用委托
container.Register<ITwitterBusiness>(() => new TwitterBusiness(httpClientTwitter));
看起来很简单,但我不知道这种方法是否有任何不良副作用,例如使 SimpleInjector 运行速度变慢,或者我是否破坏了某些设计模式。
我的第二个想法是使用基于上下文的注入 http://simpleinjector.readthedocs.io/en/latest/advanced.html#context-based-injection
我相信这将允许我将某个 HttpClient 实例注入某个类。仍然不确定这是如何工作的。
我很好奇我是否可以完全通过设计来解决这个问题。例如通过创建虚拟类。我只是没有找到任何好的例子,但如果我理解正确,那么我可以创建继承HttpClient 的虚拟类,例如HttpClientTwitter,这样我就可以摆脱模棱两可的注册。
谢谢!
【问题讨论】:
标签: c# dependency-injection dotnet-httpclient simple-injector ambiguous