如何在运行时将变量传递给AutoMapper以进行即时计算?

时间:2018-03-02 20:33:59

标签: c# automapper automapper-6

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

}

0 个答案:

没有答案