自定义属性仅适用于特定类

时间:2010-02-09 20:19:42

标签: c# .net-3.5 attributes postsharp

我想在我的自定义(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

2 个答案:

答案 0 :(得分:1)

我认为这是不可能的。 更好的解决方案可能是在自定义属性构造函数上使用Obsolete属性来警告目标类应该实现接口Y.

答案 1 :(得分:1)

您可以使用PostSharp方法CompileTimeValidate并使用反射来检查类型是否具有派生类型。但是,在装配中查找所有类型可能计算成本很高。