PostSharp 接口方法属性
PostSharp Interface Method Attribute
假设我有以下内容:
public interface IMyInterface {
void DoSomething();
}
public class MyClass: IMyInterface {
public void DoSomething() {
// do something
}
}
然后,我想像这样创建一个方法属性:
[PSerializable]
[AttributeUsage(AttributeTargets.Method)]
public class NotNullAttribute : MethodImplementationAspect
{
public override void OnInvoke(MethodInterceptionArgs args)
{
throw new NullReferenceException();
}
}
现在,我知道我可以将其应用于 class 方法。
但是,我希望能够执行以下操作:
public interface IMyInterface {
[NotNull]
void DoSomething();
}
然后,所有实现此方法的 classes 都应用了拦截器。不幸的是,这在编译时给我一个错误。
这可能吗?我试图在文档中找到答案,但一直没有成功。
如果 可行,有人可以帮我了解如何完成吗?
我成功了...
我在属性定义和抽象方法上都缺少一个属性。
工作示例:
[PSerializable]
[MulticastAttributeUsage(MulticastTargets.Method, TargetMemberAttributes = MulticastAttributes.Instance)]
[AttributeUsage(AttributeTargets.Method)]
public class NotNullAttribute : MethodInterceptionAspect
{
public override void OnInvoke(MethodInterceptionArgs args)
{
throw new NullReferenceException();
}
}
及其使用方法:
public interface IMyInterface {
[NotNull(AttributeInheritance = MulticastInheritance.Multicast)]
void DoSomething();
}
public class MyClass: IMyInterface {
public void DoSomething() {
// do something
}
}
假设我有以下内容:
public interface IMyInterface {
void DoSomething();
}
public class MyClass: IMyInterface {
public void DoSomething() {
// do something
}
}
然后,我想像这样创建一个方法属性:
[PSerializable]
[AttributeUsage(AttributeTargets.Method)]
public class NotNullAttribute : MethodImplementationAspect
{
public override void OnInvoke(MethodInterceptionArgs args)
{
throw new NullReferenceException();
}
}
现在,我知道我可以将其应用于 class 方法。
但是,我希望能够执行以下操作:
public interface IMyInterface {
[NotNull]
void DoSomething();
}
然后,所有实现此方法的 classes 都应用了拦截器。不幸的是,这在编译时给我一个错误。
这可能吗?我试图在文档中找到答案,但一直没有成功。
如果 可行,有人可以帮我了解如何完成吗?
我成功了...
我在属性定义和抽象方法上都缺少一个属性。
工作示例:
[PSerializable]
[MulticastAttributeUsage(MulticastTargets.Method, TargetMemberAttributes = MulticastAttributes.Instance)]
[AttributeUsage(AttributeTargets.Method)]
public class NotNullAttribute : MethodInterceptionAspect
{
public override void OnInvoke(MethodInterceptionArgs args)
{
throw new NullReferenceException();
}
}
及其使用方法:
public interface IMyInterface {
[NotNull(AttributeInheritance = MulticastInheritance.Multicast)]
void DoSomething();
}
public class MyClass: IMyInterface {
public void DoSomething() {
// do something
}
}