微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

自定义属性未在断点上触发

如何解决自定义属性未在断点上触发

我创建了一个用于对象验证的自定义属性,并在TaskValidatorAttribute类中的任何地方设置了断点,似乎它没有执行任何操作或触发了任何操作。请参阅下面的代码

自定义属性

[AttributeUsage(AttributeTargets.Class)]
public TaskValidatorAttribute: Attribute
{
   public TaskValidatorAttribute(Type type)
   {
      if (type.IsSubclassOf(typeof(BaseClass))) 
      {
          // some code for validation
      }
   }
}

基本类

public abstract class BaseClass {}

继承的类

[TaskValidator(typeof(ModelTest))]
public class ModelTest : BaseClass {}

单元测试

public class ModelValidationTests
{
   [Fact]
   public void ValidateModel()
   {
      var model = new Modeltest();
      model.ShouldNotBeNull();
   }
}

我尝试在单元测试中运行它以触发我创建的自定义属性,但是没有运气。我错过了什么吗?

解决方法

创建ModelTest类的实例时,并不意味着将创建应用于该类的属性的实例。仅当您显式获取属性时,才会实例化属性。实际上,您甚至不需要ModelTest类的实例!

所以这里的关键是属性不是对象的一部分,它是具有不同用途和生命周期的装饰器。

尝试一下:

public class ModelValidationTests
{
   [Fact]
   public void ValidateModel()
   {
      object[] attributes = typeof(ModelTest).GetCustomAttributes(true);
      attributes.ShouldNotBeNull();
   }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。