public void Weave(IWeavingContext weavingContext, TypeDefinition target, CustomAttribute weaveAttribute)
{
TypeDefinition dtoType = new TypeDefinition(
target.Namespace, "Dto",
TypeAttributes.Class | TypeAttributes.NestedPublic,
target.Module.Import(typeof(object)));
target.NestedTypes.Add(dtoType);
var dtoMemberAttributeType = target.Module.Import(typeof (DtoMemberAttribute)).Resolve();
foreach (var property in target.Properties)
{
for (var i = property.CustomAttributes.Count - 1; i >= 0; --i)
{
var attribute = property.CustomAttributes[i];
if (attribute.AttributeType.Resolve() == dtoMemberAttributeType)
{
property.CustomAttributes.RemoveAt(i);
var field = new FieldDefinition(property.Name, FieldAttributes.Public, property.PropertyType);
dtoType.Fields.Add(field);
}
}
}
}