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

问题描述

我创建了一个用于对象验证的自定义属性,并在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();
   }
}

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...