我正在尝试使用AutoMapper 6.3来允许我将模型自动映射到视图模型中。
首先,我将我的AutoMapper实例注册到我的IUnitContainer
,如此
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);
}
}