1

我正在尝试使用 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);
    }

}
4

0 回答 0