6K Star 11.8K Fork 4K

GVPdotNET China / Furion

 / 详情

在使用AspectDispatchProxy时,AOP拦截的方法MethodInfo中获取不到CustomAttribute

已完成
创建于  
2021-04-19 08:28

特别说明:如果 Issue 报告为问题且开发成员回复确认问题之后但三天内都不能得到反馈,则视为无效Issue。

Furion 版本号

2.0.3


Web 项目类型

  • WebApi

描述你的问题

在使用AspectDispatchProxyp实现AOP功能时,AOP拦截的Invok方法MethodInfo中获取不到CustomAttribute。
这样使用Attribute标记方法就没有作用了。
在AOP功能中,只需要拦截其中一些方法时,一般都是使用Attribute来标记方法。
现在在代理类里,拦截方法时,Invoke方法的MethodInfo参数获取不到CustomAttribute, 就达不到预期要求了。


异常堆栈信息

代码或代码仓库

AOP拦截的Invok方法MethodInfo中获取不到CustomAttribute


数据库信息

  • Sqlite

期待结果

AOP拦截的Invok方法MethodInfo中获取可以获取到CustomAttribute,获得标记在方法上的Attribute。


评论 (2)

yus1977 创建了任务
yus1977 关联仓库设置为dotNET China/Furion
展开全部操作日志

我是按文档的示例来的,,代码如下
属性
[AttributeUsage(AttributeTargets.Method)] public class LogAspectAttribute : Attribute { }
服务方法接口
`

public interface ITestService
{
string SayHello(string word);
}

服务类

[Injection(Proxy = typeof(LogDispatchProxy))]
public class TestService: ITestService, ITransient
{
[LogAspect]
public string SayHello(string word)
{
return $"Hello {word}";
}
}

LogDispatchProxy类的Invok方法 在该方法里,获取不到TestService.SayHello上贴的属性 LogAspectAttribute
///


/// 拦截方法
///

///
///
///
public override object Invoke(MethodInfo method, object[] args)
{
// 判断方法是否贴了指定属性
var hasAttribute = method.IsDefined(typeof(LogAspectAttribute));
// 获取指定属性
var logAspectAttribute = method.GetCustomAttribute();

        Console.WriteLine("SayHello 方法被调用了");

        var result = method.Invoke(Target, args);

        Console.WriteLine("SayHello 方法返回值:" + result);

        return result;
    }

`

不知道是哪里写的有问题

百小僧 任务状态待办的 修改为进行中
百小僧 负责人设置为百小僧
百小僧 添加了
 
建议
标签
百小僧 添加了
 
优化
标签
百小僧 添加了
 
新功能
标签
百小僧 里程碑设置为Furion 2021
百小僧 关联分支设置为master
百小僧 计划截止日期设置为2021-04-20
百小僧 计划开始日期设置为2021-04-19
百小僧 计划截止日期2021-04-20 修改为2021-04-19
百小僧 置顶等级设置为
百小僧 优先级设置为严重
百小僧 通过 dotnetchina/Furion Commit 8845a90任务状态进行中 修改为已完成
百小僧 置顶等级 修改为不置顶
百小僧 关联分支master 修改为未关联

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(1)
563835 yus1977 1578927779
C#
1
https://gitee.com/dotnetchina/Furion.git
git@gitee.com:dotnetchina/Furion.git
dotnetchina
Furion
Furion

搜索帮助