我正在尝试使用 AutoMapper 6.3 允许我将模型自动映射到视图模型中。
首先,我IUnitContainer
像这样注册了我的 AutoMapper 实例
var mapper = new MapperConfiguration(cfg =>
{
cfg.CreateMap<TaskViewModel, Task>();
});
container.RegisterInstance<IMapper>(mapper.CreateMapper());
container.RegisterType<IUserPassport, UserPassport>(); // This has nothing to do with AutoMapper but is needed to convert date time.
现在,在我的控制器中,我想从数据库中提取一个模型,然后我想将它映射/投射到我的视图模型中。
我尝试执行以下操作
var task = UnitOfWork.Tasks.Find(x => x.Id == 123)
.ProjectTo<TaskViewModel>()
.FirstOrDefault();
但是,我的视图模型需要知道当前用户的时区才能将时间从 UTC 转换为本地时区。不知何故,我需要能够传递Passport.User.TimeZone
给 ViewModel 才能处理日期时间转换?
这是我尝试投影viewModel的方式
public class TaskController : Controller
{
private IUserPassport Passport;
public TaskController(IUserPassport passport)
{
Passport = passport;
}
public ActionResult Show(int? id)
{
if (!id.HasValue)
{
return HttpNotFound();
}
// Some how Passport.User.TimeZone needs to be passed to the
// TaskViewModel to the time stamps are converted.
var task = UnitOfWork.Tasks.Find(x => x.Id == id.Value)
.ProjectTo<TaskViewModel>()
.FirstOrDefault();
return View(task);
}
}