我想在我的自定义(PostSharp)属性上定义一个constrait。我的目标是在编译时获取错误或警告,如果类 X 不实现 Y 接口,但它具有我的属性。
所以这应该有效:
[MyAttributeOnlyForY]
public class X : Y { ... }
但这会破坏编译过程:
[MyAttributeOnlyForY]
public class X { ... }
怎么可能?
原因
这个属性就像一个方面(这是PostSharp attribute),我想确保weaved类为这个属性提供所有需要的信息。
我想在
上避免 null 结果(eventArgs.Instance as ILoggerServiceOwner)
我认为complie时间检查是一种很好的做法。
解决方案
我在这里找到了一个完美的开始:Validating attribute usage with PostSharp Aspects
答案 0 :(得分:1)
我认为这是不可能的。 更好的解决方案可能是在自定义属性构造函数上使用Obsolete属性来警告目标类应该实现接口Y.
答案 1 :(得分:1)
您可以使用PostSharp方法CompileTimeValidate并使用反射来检查类型是否具有派生类型。但是,在装配中查找所有类型可能计算成本很高。