gpt4 book ai didi

caSTLe-windsor - 使用 CaSTLe Windsor IInterceptor 拦截属性

转载 作者:行者123 更新时间:2023-12-04 06:37:59 28 4
gpt4 key购买 nike

有人对使用 CaSTLe DynamicProxy 拦截属性的更好方法有什么建议吗?

具体来说,我需要我正在拦截的 PropertyInfo,但它不是直接在 IInvocation 上,所以我要做的是:

public static PropertyInfo GetProperty(this MethodInfo method)
{
bool takesArg = method.GetParameters().Length == 1;
bool hasReturn = method.ReturnType != typeof(void);
if (takesArg == hasReturn) return null;
if (takesArg)
{
return method.DeclaringType.GetProperties()
.Where(prop => prop.GetSetMethod() == method).FirstOrDefault();
}
else
{
return method.DeclaringType.GetProperties()
.Where(prop => prop.GetGetMethod() == method).FirstOrDefault();
}
}

然后在我的 IInterceptor 中:
public void Intercept(IInvocation invocation)
{
bool doSomething = invocation.Method
.GetProperty()
.GetCustomAttributes(true)
.OfType<SomeAttribute>()
.Count() > 0;

}

最佳答案

通常这是不可用的。 DynamicProxy 拦截方法(包括 getter 和 setter),它不关心属性。

您可以通过使拦截器IOnBehalfAware 稍微优化此代码(参见 here )并预先发现方法->属性映射。

关于caSTLe-windsor - 使用 CaSTLe Windsor IInterceptor 拦截属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2959812/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com