我试图找到一种简单的方法来实现Polly在我的GraphServiceClient
使用DI。
我有一个GraphApiBuilder
类,我用它来与任何需要GraphServiceClient
的类进行接口,因为直接将它注入到一个具有硬逻辑的类中会使它实际上无法测试:
public class GraphApiBuilder : IGraphApiBuilder, ISingletonDependency
{
private readonly GraphServiceClient _graphServiceClient;
public GraphApiBuilder(GraphServiceClient graphServiceClient)
{
_graphServiceClient = graphServiceClient;
}
public GraphServiceClient Create()
{
return _graphServiceClient;
}
}
在我的ConfigureServices
方法中,我这样做:
context.Services.AddSingleton(_ =>
{
var graphApiOptions = new GraphApiOptions();
context.Services.GetConfiguration().Bind(GraphApiOptions.SectionName, graphApiOptions);
var clientSecretCredential = new ClientSecretCredential(graphApiOptions.TenantId, graphApiOptions.ClientId, graphApiOptions.ClientSecret);
return new GraphServiceClient(clientSecretCredential);
});
您可以看到,自从Microsoft在this doc中推荐它以来,所有内容都是单例的
现在我希望当GraphServiceClient
返回一个错误时,它使用Polly重试。我不想重复这段代码。
1条答案
按热度按时间5vf7fwbs1#
在阅读了Peter Csala对我的原始帖子的评论后,我发现微软已经在
GraphServiceClient
上默认包含了RetryHandler
。然而,我想用自己的机制覆盖重试机制,我发现this post显示了一个自定义实现,这是一个很好的起点。
我最后的好东西看起来像这样: