使用 .NET 反射来了解方法是否不是集合 属性 而不是来自基 class
use .NET reflection to know if a method is not a set property and not from a base class
我正在使用 castle windsor interceptor 来尝试开始和完成所有 public 方法的事务。
我有这个Intercept
方法:
public void Intercept(IInvocation invocation)
{
MethodInfo method;
try
{
method = invocation.MethodInvocationTarget;
}
catch
{
method = invocation.GetConcreteMethod();
}
if (!method.IsPublic)
{
return;
}
if (!((IList) new[] {"ncontinuity2.core", "c2.bases"}).Contains(method.DeclaringType.Assembly.GetName().Name))
{
return;
}
PerformUow(invocation);
}
我找不到排除 属性 set 方法的方法,例如,我在基础 class:
中有这个 属性
public virtual Context Context
{
get { return _context; }
set
{
_context = value;
}
}
我想排除这样的属性 Set_Context
。
我怎么知道它是一个 属性 并且有没有办法知道它是否在基数 class 中?
要判断一个方法是否被继承,可以通过DeclaringType
与实际对象类型进行比较。我不确定 Castle-Windsor 部分,但应该是这样的
invocation.TargetType == method.DeclaringType
对于 属性 访问器,IsSpecialName
属性 等于 true
。
!method.IsSpecialName
一起
if (invocation.TargetType == method.DeclaringType && !method.IsSpecialName) {
// We have a non-inherited method not being a property accessor.
}
我正在使用 castle windsor interceptor 来尝试开始和完成所有 public 方法的事务。
我有这个Intercept
方法:
public void Intercept(IInvocation invocation)
{
MethodInfo method;
try
{
method = invocation.MethodInvocationTarget;
}
catch
{
method = invocation.GetConcreteMethod();
}
if (!method.IsPublic)
{
return;
}
if (!((IList) new[] {"ncontinuity2.core", "c2.bases"}).Contains(method.DeclaringType.Assembly.GetName().Name))
{
return;
}
PerformUow(invocation);
}
我找不到排除 属性 set 方法的方法,例如,我在基础 class:
中有这个 属性public virtual Context Context
{
get { return _context; }
set
{
_context = value;
}
}
我想排除这样的属性 Set_Context
。
我怎么知道它是一个 属性 并且有没有办法知道它是否在基数 class 中?
要判断一个方法是否被继承,可以通过DeclaringType
与实际对象类型进行比较。我不确定 Castle-Windsor 部分,但应该是这样的
invocation.TargetType == method.DeclaringType
对于 属性 访问器,IsSpecialName
属性 等于 true
。
!method.IsSpecialName
一起
if (invocation.TargetType == method.DeclaringType && !method.IsSpecialName) {
// We have a non-inherited method not being a property accessor.
}