我有一个查询IGetHamburgers
,它调用外部API。 我已将IGetHamburgers
的实现注册为我的DI容器中的Singleton。我正在使用Polly作为断路器,如果两个请求失败,则电路将打开。
我的目标是所有对汉堡包api的调用都应通过同一断路器进行,如果GetHamburgers失败,则所有其他调用也应失败。
我该如何使用我的策略?我应该像这样将我的策略注册为字段吗:
```html我有一个查询IGetHamburgers
,它调用外部API。 我已将IGetHamburgers
的实现注册为我的DI容器中的Singleton。我正在使用Polly作为断路器,如果两个请求失败,则电路将打开。
我的目标是所有对汉堡包api的调用都应通过同一断路器进行,如果GetHamburgers失败,则所有其他调用也应失败。
我该如何使用我的策略?我应该像这样将我的策略注册为字段吗:
```private Policy _policy;
private Policy Policy
{
get
{
if(this_policy != null)
{
return this_policy;
}
this._policy = Policy
.Handle<Exception>()
.CircuitBreaker(2, TimeSpan.FromMinutes(1));
return this._policy;
}
}
public object Execute(.......)
{
return Policy.Execute(() => this.hamburgerQuery.GetHamburgers());
}
或者
public object Execute(.......)
{
var breaker = Policy
.Handle<Exception>()
.CircuitBreaker(2, TimeSpan.FromMinutes(1));
return breaker.Execute(() => this.hamburgerQuery.GetHamburgers());
}
我认为第一种选择是正确的,因为Policy对象将始终相同,并且可以跟踪异常计数等信息。 我的问题是,第二个选项也能行吗?我在Polly的Github上找到了很多样本/示例,但我找不到任何与DI之类的东西一起使用Polly的"现实世界"示例。