有时候我们希望能从模型中获取一些值,但又不想改变模型的基础架构。那么通过特性绑定值就是一个思路。
例如数据库表名与MVC Model的关系,在MVC架构中,Model一般需要与数据库表对应。因此表名与Model的关系就十分密切,但Model的命名一般不使用数据库表名,那么通过特性将数据库表名直接绑定在Model类中就非常方便了。
第一步——建立自定义特性
特性可向程序中添加元数据。元数据是有关在程序中定义的类型的信息。所有的 .NET 程序集都包含指定的一组元数据,这些元数据描述在程序集中定义的类型和类型成员。可以添加自定义特性,以指定所需的任何附加信息。
简而言之,特性就是能添加在程序集基础信息中的数据。
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct)]
public class TableAttribute : Attribute
{
public readonly string tableName;
public TableAttribute(string tableName)
{
this.tableName = tableName;
}
}
第二步——在类中添加特性
这一步将tableName = "SF_DEPARTMENT_INFO" 这一信息绑定在 DepartmentModel这一个Model中。
[TableAttribute("SF_DEPARTMENT_INFO")]
public class DepartmentModel
{
public string ID { get; set; }
public string DEPARTMENT_NAME { get; set; }
public string PID { get; set; }
public string DEPARTMENT_LEVEL { get; set; }
public string DELETE_FLAG { get; set; }
}
第三步——使用
当需要使用到特性值时,通过Attribute 的GetCustomAttribute()方法就可以将该自定义特性的实例获取出来。
TableAttribute tableAttribute = (TableAttribute)Attribute.GetCustomAttribute(
typeof(T), typeof(TableAttribute));
string tableName = tableAttribute.tableName;