一个应用程序特定示例来说明我的直接问题:
我有一个元数据提供程序类,它具有以下(简化的)接口(interface):
public class CtsDataAnnotationsModelMetadataProvider : DataAnnotationsModelMetadataProvider
{
protected override ModelMetadata CreateMetadata(IEnumerable<Attribute> attributes, Type containerType, Func<object> modelAccessor, Type modelType, string propertyName)
{
var metadata = base.CreateMetadata(attributes, containerType, modelAccessor, modelType, propertyName);
return metadata;
}
}
现在我想用额外的属性扩展 ModelMetadata
,填充这些属性并返回 ExtendedModelMetadata
的实例。在我的扩展实例中,如何通过 base.CreateMetadata
很好地传达分配给 metadata
实例的属性?我想要但没有的是;
var metadata = (ExtendedModelMetadata)base.CreateMetadata(attributes, containerType, modelAccessor, modelType, propertyName);
我可以为 ExtendedModelMetadata
创建一个构造函数,它接受一个 ModelMetadata
参数并将它的所有属性显式分配给正在构造的实例,但我想要一个更通用和较少的硬编码方法。我能做什么?
最佳答案
您可以使用 AutoMapper实现这一目标。
Mapper.CreateMap<ModelMetaData , ExtendedModelMetadata>();
.NET Framework 不提供深层复制功能。
关于c# - 我可以在 C# 中实现从派生类复制的 'copy constructor' 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9923608/