[ ] FlashMapper |
public class UserForm
{
public Guid? Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Town { get; set; }
public string State { get; set; }
public DateTime BirthDate { get; set; }
public string Login { get; set; }
public string Password { get; set; }
}
public class UserDb
{
public Guid Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Town { get; set; }
public string State { get; set; }
public DateTime BirthDate { get; set; }
public string Login { get; set; }
public string PasswordHash { get; set; }
public DateTime RegistrationTime { get; set; }
public byte[] Timestamp { get; set; }
public bool IsDeleted { get; set; }
}
public class FlashMapperInitializer : IInitializer // FlashMapper'
{
private readonly IMappingConfiguration mappingConfiguration; // ,
private readonly IPasswordHashCalculator passwordHashCalculator;
public FlashMapperInitializer(IMappingConfiguration mappingConfiguration, IPasswordHashCalculator passwordHashCalculator)
{
this.mappingConfiguration = mappingConfiguration;
}
public void Init() // ,
{
mappingConfiguration.CreateMapping(u => new UserDb
{
Id = u.Id ?? Guid.NewGuid(),
Login = u.Id.HasValue ? MappingOptions.Ignore() : u.Login,
RegistrationTime = u.Id.HasValue ? MappingOptions.Ignore() : DateTime.Now,
Timestamp = MappingOptions.Ignore(),
IsDeleted = false,
PasswordHash = passwordHashCalculator.Calculate(u.Password)
});
//mappingConfiguration.CreateMapping <...> (...); //
}
}
public class UserController : Controller
{
private readonly IMappingConfiguration mappingConfiguration;
private readonly IRepository usersRepository;
public UserController(IMappingConfiguration mappingConfiguration, IRepository usersRepository)
{
this.mappingConfiguration = mappingConfiguration;
this.usersRepository = usersRepository;
}
[HttpPost]
public ActionResult Edit(UserForm model)
{
if (!ModelState.IsValid)
return View(model);
var existingUser = usersRepository.Find(model.Id);
if (existingUser == null)
{
var newUser = mappingConfiguration.Convert(model).To();
usersRepository.Add(newUser);
}
else
{
mappingConfiguration.MapData(model, existingUser);
usersRepository.Update(existingUser);
}
return View(model);
}
}
mappingConfiguration.CreateMapping((s1, s2, s3) => new Destination { ... });
mappingConfiguration.CreateMapping((s1, s2, s3) => new Destination { ... }, o => o.CollisionBehavior(SelectSourceCollisionBehavior.ChooseAny));
public interface IUserDbBuilder : IBuilder { }
public class UserDbBuilder : FlashMapperBuilder, IUserDbBuilder
{
private readonly IPasswordHashCalculator passwordHashCalculator;
public UserDbBuilder(IMappingConfiguration mappingConfiguration, IPasswordHashCalculator passwordHashCalculator) : base(mappingConfiguration)
{
this.passwordHashCalculator = passwordHashCalculator;
}
protected override void ConfigureMapping(IFlashMapperBuilderConfigurator configurator)
{
configurator.CreateMapping(u => new UserDb
{
Id = u.Id ?? Guid.NewGuid(),
Login = u.Id.HasValue ? MappingOptions.Ignore() : u.Login,
RegistrationTime = u.Id.HasValue ? MappingOptions.Ignore() : DateTime.Now,
Timestamp = MappingOptions.Ignore(),
IsDeleted = false,
PasswordHash = passwordHashCalculator.Calculate(u.Password)
});
}
}
Kernel.Bind().To();
public static IBindingWhenInNamedWithOrOnSyntax AsFlashMapperBuilder(
this IBindingWhenInNamedWithOrOnSyntax builder) where T : IFlashMapperBuilder
{
builder.Kernel.AddBinding(new Binding(typeof(IFlashMapperBuilder), builder.BindingConfiguration));
return builder;
}
Kernel.Bind().To().AsFlashMapperBuilder();
public class UserController : Controller
{
private readonly IUserDbBuilder userDbBuilder;
private readonly IRepository usersRepository;
public UserController(IUserDbBuilder userDbBuilder, IRepository usersRepository)
{
this.userDbBuilder = userDbBuilder;
this.usersRepository = usersRepository;
}
[HttpPost]
public ActionResult Edit(UserForm model)
{
if (!ModelState.IsValid)
return View(model);
var existingUser = usersRepository.Find(model.Id);
if (existingUser == null)
{
var newUser = userDbBuilder.Build(model);
usersRepository.Add(newUser);
}
else
{
userDbBuilder.MapData(model, existingUser);
usersRepository.Update(existingUser);
}
return View(model);
}
}