首页 新闻 会员 周边 捐助

需要用c# 实现一个需求,任意方法调用失败,都会重复再调用2次。

0
悬赏园豆:5 [已解决问题] 解决于 2017-03-16 16:36

比如有一个 Person 类,现在里面有1个Add 方法,如果出现异常,进入catch  然后  再次调用Add 方法  计数器减一次,如果计数器小于0 ,那么就抛出异常,否则继续调用Add 方法。

现在 新增了很多方法,比如有 Delete,Update ,Putch, 等等,都需要支持调用失败,重复尝试调用,所以代码需要重构,总不能每个方法里面都写try catch 然后重复那种相同的逻辑,希望有大神能实现这个重构。

pengbg的主页 pengbg | 初学一级 | 园豆:13
提问于:2017-03-16 10:58
< >
分享
最佳答案
2

之前做过一个.正经的解决方案是ioc容器加接口方法拦截

收获园豆:5
吴瑞祥 | 高人七级 |园豆:29449 | 2017-03-16 12:01

给点资料撒~

pengbg | 园豆:13 (初学一级) | 2017-03-16 12:38

@pengbg: 我不是都写了..园子里一大堆这种文章.

你到百度搜  ioc 方法拦截 .net 

吴瑞祥 | 园豆:29449 (高人七级) | 2017-03-16 13:07
其他回答(1)
0

Add方法应该没有副作用。
重复几次应该是调用者该干的事
可以写个方法

Try<T>(Func<T> fun,int count){
    while(true){
        try{
           return fun();
        }
        catch(e){
            count--;
            if(count < 0) throw e;
        }
    }
}

调用的时候

var result = Try(()=>{return  Add();},1  );
长蘑菇星人 | 园豆:1832 (小虾三级) | 2017-03-16 11:15

恩,确实不错,不过楼下的更好些,应为 方法的签名是多边万化的。

支持(0) 反对(0) pengbg | 园豆:13 (初学一级) | 2017-03-16 12:37

@pengbg: Aop的话确实很完美,可以用 AutoFac 试试。

支持(0) 反对(0) 长蘑菇星人 | 园豆:1832 (小虾三级) | 2017-03-16 13:19
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册