AutoMapper - 传入参数以映射关联对象

时间:2018-01-12 20:53:30

标签: c# automapper

我正在使用Automapper映射客户对象。每个客户对象都有一个Address对象数组。

在AdressType属性的映射期间,我想使用在Customer对象上的Mapper.Map调用期间传入的变量。该变量与Customer对象本身无关,但与相关地址对象的映射相关。 传入一个使用变量来映射AdressType属性的函数也没问题。有没有办法做这样的事情?

我不确定如何调用ForMember来映射AddressType属性。在映射客户对象之前创建变量。它并不像在ForMember中调用方法来映射AddressType那么容易。我将不得不使用在此过程中创建的变量。

当我输入这个时,我正在考虑将变量设为静态,以便可以通过静态方法返回,该方法可以在ForMember中使用。但第二个想到我不认为我可以逃脱这个,因为应用程序实际上是一个WCF服务。每个请求的变量都不同。

我在VS2012解决方案中使用AutoMapper 4.2.1。 任何想法,指针,生命线?

    myVariable = ...
    var customerDest = mapper.Map<CustomerSource, CustomerDestination>(someCustomerSource, <my variable or function>);


    // Configuration of AutoMapper
    var config = new MapperConfiguration(cfg => {
      cfg.CreateMap<AddressSource, AddressDestination>()
        .ForMember(m => m.AddressType, 
            opt => opt.MapFrom(src => MapAddressType(src.AddressType, <my variable>) ???


    public class Customer 
    { 
        public Address[] Addresses { get; set; }
    }

    public Address
    {
      public string AdresType { get; set; }
    }

解决方案:

cfg.CreateMap<AddressSource, AddressDestination>()
                    .ForMember(m => m.AddressType, opt => opt.ResolveUsing(
                        (resolutionResult, source) => 
                            {
                                var addressType = (resolutionResult.Context.SourceValue as AddressSource).AddressType;
                                var myVariable = resolutionResult.Context.Options.Items["myVariable"] as Dictionary<string, SomeType>;
                                return DoStuff(addressType, myVariable);
                            }));



var dest = mapper.Map<CustomerDestination>(customerSource,
                        opt => opt.Items["myVariable"] = myVariable);

0 个答案:

没有答案