User
からにマッピングしていると仮定していますUser
(そうでない場合は、宛先タイプを変更するだけです)
次の例では、このクラスを想定しています。
public class User
{
public string Name { get; set; }
public int Age { get; set; }
}
次に、separateAutoMapper.Configuration
を使用して 2 つのマップを定義できます。
[TestMethod]
public void TestMethod()
{
var configuration1 = new Configuration(new TypeMapFactory(), MapperRegistry.AllMappers());
var mapper1 = new MappingEngine(configuration1);
configuration1.CreateMap<User, User>();
var user = new User() { Name = "John", Age = 42 };
var mappedUser1 = mapper1.Map<User, User>(user);//maps both Name and Age
var configuration2 = new Configuration(new TypeMapFactory(), MapperRegistry.AllMappers());
configuration2.CreateMap<User, User>().ForMember(dest => dest.Age, opt => opt.Ignore());
var mapper2 = new MappingEngine(configuration2);
var mappedUser2 = mapper2.Map<User, User>(user);
Assert.AreEqual(0, mappedUser2.Age);//maps only Name
}
他のすべての Type を 2 回マッピングすることを回避するには、Configuration
which から到達できるすべてのものをマップする共通メソッドを追加し、User
これを の両方configuration1
とconfiguration2
の呼び出しの後に呼び出すことができますCreateMap
。
アップデート
Automapper 4.x の場合は、次を使用します。
var configuration1 = new MapperConfiguration(cfg =>
{
cfg.CreateMap<User, User>();
});
var mapper1 = configuration1.CreateMapper();
var user = new User() { Name = "John", Age = 42 };
var mappedUser1 = mapper1.Map<User, User>(user);//maps both Name and Age
var configuration2 = new MapperConfiguration(cfg =>
{
cfg.CreateMap<User, User>().ForMember(dest => dest.Age, opt => opt.Ignore());
});
var mapper2 = configuration2.CreateMapper();
var mappedUser2 = mapper2.Map<User, User>(user); //maps only Name