C#中依赖注入装饰器来优化代码架构

C#中依赖注入装饰器来优化代码架构

同文讲解视频C#中依赖注入装饰器来优化代码架构
在这里插入图片描述

场景描述

假设我们需要实现算法A、B,故设计接口IWork,使得A、B都继承于IWork接口,如下
这里Console.WriteLine完进行throw是为了模拟方法执行失败的情况

public interface IWork
{
   
    void DoWork();
}


internal class A : IWork
{
   
    public void DoWork()
    {
   
        Console.WriteLine("I am doing some work in A.");
        throw new NotImplementedException();
    }
}

internal class B : IWork
{
   
    public void DoWork()
    {
   
        Console.WriteLine("I am doing some work in B.");
        throw new NotImplementedException();
    }
}

现需要对DoWork方法进行耗时计算和重试Retry逻辑(当方法执行失败时,间隔一定时间段再执行一次,若失败则重复,不超过3次)。则需要改写DoWork方法如下
注:RetryPolicy来自Polly库,用于实现重试逻辑

internal class A : IWork
{
   
    private readonly RetryPolicy<bool> _retryPolicy;

    public A()
    {
   
        _retryPolicy = Policy
            .HandleResult<bool>(r => !r) //返回true就代表需要执行Retry
            .Or<HttpRequestException>()
            .WaitAndRetry(
                3,
                retryAttempt => TimeSpan.FromSeconds(1),
                onRetry: (outcome, timespan, retryAttempt, context) =>
                {
   
                    Console.WriteLine($"{
     "".PadLeft(50, '-')}");
                    Console.WriteLine(
                        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值