J'ai une question à poser, IGetHamburgers
qui appelle une API externe. J'ai enregistré l'implémentation de IGetHamburgers
dans mon conteneur DI comme un Singleton. J'utilise Polly comme un coupe-circuit, si deux demandes échouent le circuit s'ouvrira.
Mon objectif est que tous les appels à l'api Hamburger passent par le même disjoncteur, si GetHamburgers échoue, tous les autres appels doivent échouer également.
Comment dois-je utiliser ma police ? Dois-je enregistrer ma politique en tant que champ comme ceci :
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());
}
OU
public object Execute(.......)
{
var breaker = Policy
.Handle<Exception>()
.CircuitBreaker(2, TimeSpan.FromMinutes(1));
return breaker.Execute(() => this.hamburgerQuery.GetHamburgers());
}
Je pense que la première option est la plus appropriée car l'objet de la politique sera toujours le même et pourra garder la trace du nombre d'exceptions et d'autres choses de ce genre. Ma question est la suivante : l'option numéro deux fonctionnera-t-elle aussi bien ? J'ai trouvé beaucoup d'échantillons/exemples sur Pollys Github mais je n'ai pas trouvé d'exemples du "monde réel" où Polly est utilisé avec DI et des choses comme ça ?