Polly政策应该是单身吗?
我有一个查询, IGetHamburgers
,它调用外部API。 我在我的DI容器中注册了IGetHamburgers
的实现,作为Singleton。 我使用Polly作为断路器,如果两个请求失败,电路将打开。
我的目标是所有对Hamburger api的调用应该通过相同的断路器,如果GetHamburgers失败,那么所有其他调用也应该失败。
我该如何使用我的保单? 我应该将我的政策注册为如下字段:
private Policy _policy; private Policy Policy { get { if(this_policy != null) { return this_policy; } this._policy = Policy .Handle() .CircuitBreaker(2, TimeSpan.FromMinutes(1)); return this._policy; } } public object Execute(.......) { return Policy.Execute(() => this.hamburgerQuery.GetHamburgers()); }
要么
public object Execute(.......) { var breaker = Policy .Handle() .CircuitBreaker(2, TimeSpan.FromMinutes(1)); return breaker.Execute(() => this.hamburgerQuery.GetHamburgers()); }
我想第一个选项是正确的方法,因为那时Policy对象将始终是相同的,并可以跟踪exception计数和类似的东西。 我的问题是,第二种选择也会起作用吗? 我在Pollys Github上发现了很多样本/例子,但我找不到任何“真实世界”的例子,其中Polly与DI一起使用以及类似的东西?
我想第一个选项是正确的方法,因为那时Policy对象将始终是相同的,并可以跟踪exception计数和类似的东西。
正确。 这在Polly wiki中有所描述。 简单来说:
请参阅此stackoverflow答案 ,以获得有关配置策略与其使用分开的更广泛讨论,通过DI将它们注入使用站点,以及在整个范围内重用相同实例(例如单例)与使用单独实例的效果(2017年6月)Polly政策。
第二个选项也会起作用吗?
否(因为相反的原因:每个调用创建一个单独的实例,因此不会与其他调用共享电路统计/状态)。
上述就是C#学习教程:Polly政策应该是单身吗?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请点击右边联系管理员删除。
如若转载,请注明出处:https://www.ctvol.com/cdevelopment/1045288.html