如何编写PostSharp方面以将属性应用于类?我正在考虑的场景是需要使用DataContract属性进行修饰的WCF实体(或域对象).它也应该有一个Namespace属性.像这样:
using System.Runtime.Serialization;
namespace MWS.Contracts.Search.V1
{
namespace Domain
{
[DataContract(Namespace = XmlNamespaces.SchemaNamespace)]
public class PagingContext
{
[DataMember]
public int Page { get; set; }
[DataMember]
public int ResultsPerPage { get; set; }
[DataMember]
public int MaxResults { get; set; }
}
}
}
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,您可以看到我想要输出的样子.它具有应用于类的DataContract属性.手工完成这项工作既乏味又不独特.我真的只想编写一个可以应用于我的"域"命名空间的方面.然后它将为我应用序列化相关属性.这样我就可以专注于开发实体对象,而不用担心序列化的细节.
我在PostSharp的网站上找到了用于在方法之前,之后和代替方法注入代码的文档.然而,我正在寻找的是一种将属性注入类型的方法.
这是解决方案!
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Runtime.Serialization;
using PostSharp.Aspects;
using PostSharp.Extensibility;
using PostSharp.Reflection;
namespace MWS.Contracts.Aspects
{
// We set up multicast inheritance so the aspect is automatically …Run Code Online (Sandbox Code Playgroud) 我问过如何将枚举数量作为常量?,我发现在编译期间我无法获得枚举数,因为C#使用反射来实现.
我读了什么是反射,为什么它有用?所以我对反思有一个非常基本的理解.
为了得到枚举的数量,我可以使用Enum.GetNames(typeof(Item.Type)).Length;,这在运行时使用反射发生.
我没有看到获取枚举计数所需的任何运行时知识,因为据我所知,在运行时期间无法更改枚举的数量.
为什么C#必须使用反射来获取枚举数?为什么不能在编译期间这样做?