C# 自动映射:映射到受保护的属性
我需要使用C# 自动映射:映射到受保护的属性,c#,automapper,C#,Automapper,我需要使用Automapper映射到类上的protected属性。我在这个类上公开了一个public方法,用于设置属性的值。此方法需要一个参数。如何将值映射到此类 目的地类别: public class Policy { private Billing _billing; protected Billing Billing { get { return _billing; }
Automapper
映射到类上的protected
属性。我在这个类上公开了一个public
方法,用于设置属性的值。此方法需要一个参数
。如何将值映射到此类
目的地类别:
public class Policy
{
private Billing _billing;
protected Billing Billing
{
get { return _billing; }
set { _billing = value; }
}
public void SetBilling(Billing billing)
{
if (billing != null)
{
Billing = billing;
}
else
{
throw new NullReferenceException("Billing can't be null");
}
}
}
下面是我的Automapper
code(伪代码)的外观:
Mapper.CreateMap<PolicyDetail, Policy>()
.ForMember(d => d.SetBilling(???),
s => s.MapFrom(x => x.Billing));
Mapper.CreateMap()
.FormMember(d=>d.SetBilling(?),
s=>s.MapFrom(x=>x.Billing));
我需要向SetBilling(Billing Billing)方法传递一个Billing类。我该怎么做?或者,我可以只设置受保护的计费属性吗?最简单的方法:使用AfterMap/BeforeMap构造
Mapper.CreateMap<PolicyDetail, Policy>()
.AfterMap((src, dest) => dest.SetBilling(src.Billing));
Mapper.CreateMap()
.AfterMap((src,dest)=>dest.SetBilling(src.Billing));
也可以:告诉AutoMapper识别受保护的成员:
Mapper.Initialize(cfg =>
{
// map properties with public or internal getters
cfg.ShouldMapProperty = p => p.GetMethod.IsPublic || p.GetMethod.IsAssembly;
cfg.CreateMap<Source, Destination>();
});
Mapper.Initialize(cfg=>
{
//使用公共或内部getter映射属性
cfg.ShouldMapProperty=p=>p.GetMethod.IsPublic | | p.GetMethod.IsAssembly;
CreateMap();
});
不需要额外的后置地图。默认情况下,AutoMapper会查找公共属性,您必须在全局或概要文件的基础上告诉它,以执行不同的操作()这两个类的属性没有共享太多相同的名称。因此,我知道如何使用Automapper的唯一方法就是使用.ForMember。这就是为什么So是web上最好的技术资源的原因之一。你还可以在哪里提出问题,并让编写软件的人回答。哪个更有效?使用AfterMap或配置?更有效还是更明显?我喜欢使用更具语义的方法。AfterMap确实是核心选项,而且更容易出错。有没有一种非静态的方式,使用MapperConfiguration而不使用配置文件?@cdie我在我的示例中没有使用配置文件。但那个“cfg”的东西,和传递给MapperConfiguration构造函数的东西是一样的。只需将“Mapper.Initialize”替换为“new MapperConfiguration”