C# &引用;使用;嵌入式类型中属性的类型配置

C# &引用;使用;嵌入式类型中属性的类型配置,c#,.net,automapper,C#,.net,Automapper,考虑我上下传递的这3种简化示例类型(实际上我只在DomainObject和WrapperClass之间自动映射): DomainObject是我的大多数应用程序所处理的,而Dalenty是我的数据访问层在与DB打交道时所处理的。注意(在本例中)有2个计算值不会持久化,而是从外部计算的(本例中,无论如何计算)。因此,我宁愿不把他们包括在我的Dalenty中 对于向上映射(src==dalenty,dest==DomainObject),我想告诉Automapper,对于DomainObject中的

考虑我上下传递的这3种简化示例类型(实际上我只在DomainObject和WrapperClass之间自动映射):

DomainObject是我的大多数应用程序所处理的,而Dalenty是我的数据访问层在与DB打交道时所处理的。注意(在本例中)有2个计算值不会持久化,而是从外部计算的(本例中,无论如何计算)。因此,我宁愿不把他们包括在我的Dalenty中

对于向上映射(src==dalenty,dest==DomainObject),我想告诉Automapper,对于DomainObject中的任何字段,它都不知道如何填充,“在这个复杂属性中查找名称匹配的属性”。据我所知,现在,我需要在创建映射时通过MapFrom手动显式指定所有属性。将是一个实时节省器(并且不容易出错),能够指定一种“使用”语句来映射

我想你可以称之为“通过暗示投射”:-)


这在当前是可能的吗?

我将把计算属性的计算移到它自己的类中。然后可以使用依赖项注入,并让计算属性调用注入的类来填充它们自己。汽车制造商不应该知道这些。DO应了解全面运行所需的内容,或者,除此之外,其工厂应了解

这也会增加类的可测试性

无论如何,如果您仍然想走这条路,您可以将一个函数传递给Automapper的映射方法

比如:

 Mapper.CreateMap<DAL, DO>()
                .ForMember(m => m.CalcProp, 
                           opt => opt.MapFrom(src => 
                            { anon function that calls calculating code, passing src } ));
Mapper.CreateMap()
.ForMember(m=>m.CalcProp,
opt=>opt.MapFrom(src=>
{anon函数,调用计算代码,传递src});
 Mapper.CreateMap<DAL, DO>()
                .ForMember(m => m.CalcProp, 
                           opt => opt.MapFrom(src => 
                            { anon function that calls calculating code, passing src } ));