1
我創建了一個繼承LocationInterceptionAspect的屬性。 出於演示的目的,代碼如下:PostSharp LocationInterceptionAspect不適用於繼承的屬性
[Serializable]
public class RepeaterAttribute : LocationInterceptionAspect
{
public override bool CompileTimeValidate(PostSharp.Reflection.LocationInfo locationInfo)
{
var propertyInfo = locationInfo.PropertyInfo;
if (propertyInfo == null) return false;
if (propertyInfo.PropertyType != typeof(String))
return false;
return base.CompileTimeValidate(locationInfo);
}
public override void OnSetValue(LocationInterceptionArgs args)
{
args.Value = ((String)args.Value) + ((String)args.Value);
args.ProceedSetValue();
}
}
我有一個名爲外部庫,並在其中一個叫父類。
namespace External
{
public class Parent
{
public String ParentProperty { get; set; }
}
}
在控制檯應用程序中,我有一個名爲Child的類從Parent繼承。 控制檯應用程序引用外部庫。
public class Child : External.Parent
{
public String ChildProperty { get; set; }
}
在我的控制檯應用程序中,我的代碼是。
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
var child = new Child();
child.ParentProperty = "A";
Console.WriteLine("This should be 'AA' : '{0}'", child.ParentProperty);
child.ChildProperty = "B";
Console.WriteLine("This should be 'BB' : '{0}'", child.ChildProperty);
Console.ReadKey();
}
}
}
,並在控制檯應用程序的AssemblyInfo.cs我:
[assembly: ConsoleApplication.Repeater(AttributeTargetTypes = "ConsoleApplication.Child")]
但是當我運行的中繼器的屬性沒有被應用到從父類繼承的「ParentProperty」。