写一个记录log的方法

-一个大坑 2019-08-19 12:12:41
我想在每个方法调用前触发一次,调用后触发一次,目前是手动加的

private void UpdateMraRPMsfBom()
{
MessageHelper.JobInfo("執行UpdateMraRPMsfBom中,請稍等......"); //在方法执行前提示一下
var newList = GetMsfBomList();
var _MraRpMsfBom = AutofacIoc.Resolve<IBaseRepository<MraRpMsfBom>>();
var oldList = _MraRpMsfBom.Get().ToList();
_MraRpMsfBom.DeleteRange(oldList);
_MraRpMsfBom.AddRange(newList);
_MraRpMsfBom.SaveChanges();
MessageHelper.JobInfo("UpdateMraRPMsfBom已成功执行!"); //在方法执行完后提示一下
}

我想做成自动的,比如下面的三个方法,在执行前和执行完都提示一下。要怎么写比较方便

public void UpdateRPData()
{
//Test(); return;
UpdateMraRPMsfBom();
UpdateMraRPOpenPo();
UpdateMraRPOnHand();
}
...全文
145 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
stherix 2019-08-19
  • 打赏
  • 举报
回复
AOP了解下
-一个大坑 2019-08-19
  • 打赏
  • 举报
回复
想过加特性,不过特性好像只在方法执行前触发
wanghui0380 2019-08-19
  • 打赏
  • 举报
回复
大大你的确认你什么什么啊,人家是webapi,是mvc。这个在httpHandler里有代理访问 你是一个光秃秃的Atrribute,谁给你代理访问啊
-一个大坑 2019-08-19
  • 打赏
  • 举报
回复
引用 11 楼 正怒月神 的回复:
[quote=引用 7 楼 -一个大坑 的回复:] [quote=引用 4 楼 正怒月神 的回复:] 而且你自己也说了,可以添加特性。 但是特性的本质就是aop。
特性都是在使用之前就进入了,如果想执行完了也执行一次要怎么写[/quote] 特性是实现过滤器来触发的。 所以本质也是aop。只是增加了特定条件而已。 我用webapi写了一个例子,你看一下 [/quote]
[LogAttribute]
        private void UpdateMraRPMsfBom()
        {}
我在网上找了这个,不过打断点并没有进
    public class LogAttribute : Attribute 
    {
        public virtual void OnActionExecuting(MethodInfo action)
        {
            Console.WriteLine("之前");
        }

        public virtual void OnActionExecuted(MethodInfo action)
        {
            Console.WriteLine("之后");
        }

        public virtual void OnActionError(MethodInfo action, Exception ex)
        {

        }

    }
极客诗人 2019-08-19
  • 打赏
  • 举报
回复
正怒月神 版主 2019-08-19
  • 打赏
  • 举报
回复
引用 7 楼 -一个大坑 的回复:
[quote=引用 4 楼 正怒月神 的回复:] 而且你自己也说了,可以添加特性。 但是特性的本质就是aop。
特性都是在使用之前就进入了,如果想执行完了也执行一次要怎么写[/quote] 特性是实现过滤器来触发的。 所以本质也是aop。只是增加了特定条件而已。 我用webapi写了一个例子,你看一下
-一个大坑 2019-08-19
  • 打赏
  • 举报
回复
引用 5 楼 冰川711 的回复:

        private void UpdateMraRPMsfBom()
        {
            var newList = GetMsfBomList();
            var _MraRpMsfBom = AutofacIoc.Resolve<IBaseRepository<MraRpMsfBom>>();
            var oldList = _MraRpMsfBom.Get().ToList();
            _MraRpMsfBom.DeleteRange(oldList);
            _MraRpMsfBom.AddRange(newList);
            _MraRpMsfBom.SaveChanges();
        }
        public void MethodLog(string methodName, Action act)
        {
            MessageHelper.JobInfo($"執行{methodName}中,請稍等......");
            act();
            MessageHelper.JobInfo($"{methodName}已成功执行!");
        }

        MethodLog("UpdateMraRPMsfBom", UpdateMraRPMsfBom);


委托可以 public void UpdateRPData() { InvokeLog(UpdateMraRPMsfBom); InvokeLog(UpdateMraRPOpenPo); InvokeLog(UpdateMraRPOnHand); } private void InvokeLog(Action act) { MessageHelper.JobInfo($"執行{act.Method.Name}中,請稍等......"); act(); MessageHelper.JobInfo($"{act.Method.Name}已成功执行!"); }
wanghui0380 2019-08-19
  • 打赏
  • 举报
回复
https://www.cnblogs.com/7tiny/p/9657451.html 比如这个实现,当然这代码有没有坑我不知道,随手百度的,给个连接只是告诉你这东西大概长什么样。
wanghui0380 2019-08-19
  • 打赏
  • 举报
回复
修改注入方法,在注入前全部变成emit或代理,所有的方法统一代理访问。既然是统一代理访问,自然你想怎么弄就怎么弄 当然前面AOP的也可以,不过建议选择IL织入类的AOP,这种其实类似emit,在编译前就织入IL代码----------当然这种玩意请小心调试,代码是编译前织入的,如果你写的不合适,错了都不知道是哪里错的
-一个大坑 2019-08-19
  • 打赏
  • 举报
回复
引用 4 楼 正怒月神 的回复:
而且你自己也说了,可以添加特性。 但是特性的本质就是aop。
特性都是在使用之前就进入了,如果想执行完了也执行一次要怎么写
¿?¿? 2019-08-19
  • 打赏
  • 举报
回复
2楼说的对,用AOP面向切面编程,将重复的功能封装起来,你去看看AOP资料就可以了
冰川711 2019-08-19
  • 打赏
  • 举报
回复

        private void UpdateMraRPMsfBom()
        {
            var newList = GetMsfBomList();
            var _MraRpMsfBom = AutofacIoc.Resolve<IBaseRepository<MraRpMsfBom>>();
            var oldList = _MraRpMsfBom.Get().ToList();
            _MraRpMsfBom.DeleteRange(oldList);
            _MraRpMsfBom.AddRange(newList);
            _MraRpMsfBom.SaveChanges();
        }
        public void MethodLog(string methodName, Action act)
        {
            MessageHelper.JobInfo($"執行{methodName}中,請稍等......");
            act();
            MessageHelper.JobInfo($"{methodName}已成功执行!");
        }

        MethodLog("UpdateMraRPMsfBom", UpdateMraRPMsfBom);


正怒月神 版主 2019-08-19
  • 打赏
  • 举报
回复
而且你自己也说了,可以添加特性。 但是特性的本质就是aop。
正怒月神 版主 2019-08-19
  • 打赏
  • 举报
回复
#2说的没错。 这种就是AOP的职责, 通过面向切面编程,把记录日志,权限验证等等, 都抽离出来, 通过过滤器或拦截器,管道等等,可以指定在方法完成前/后,执行对应的非业务逻辑处理。

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧