1

と がCustomerDtoありCustomerDomainModelます。オブジェクトを構築するときに、オートマッパーがDataBindingFactory ここで言及したものを使用するようにしCustomerDomainModelます。ConstructUsing私はクラスでAfterMap関数を見てきましたが、Mapperやりたいことを成し遂げる方法を見つけることができませんでした。どうすればいいですか?

4

1 に答える 1

3

これで使えるはずですConstructUsing。ただし、次のように正しい式に明示的にキャストする必要がある場合があります。

class Program
    {
        private static void Main(string[] args)
        {
            Mapper.CreateMap<CustomerDto, CustomerDomainModel>()
                    .ForMember(d => d.Id, opt => opt.Ignore())
                      .ConstructUsing((Func<ResolutionContext, CustomerDomainModel>) (rc => DataBindingFactory.Create<CustomerDomainModel>()));

            var dto = new CustomerDto {FirstName = "First", LastName = "Last"};
            var domain = Mapper.Map<CustomerDto, CustomerDomainModel>(dto);
            Console.WriteLine("First: " + domain.FirstName);
            Console.WriteLine("Last: " + domain.LastName);
            Console.ReadLine();
        }
    }

    public class CustomerDto
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }

    public class CustomerDomainModel
    {
        public int Id { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }

    public static class DataBindingFactory
    {
        public static T Create<T>()
        {
            return Activator.CreateInstance<T>();
        }
    }
于 2013-02-23T16:07:42.800 に答える