在我的项目中,我的大部分操作都会返回一个继承自 BaseViewModel 的视图模型,但也有例外。所以我在 ControllerBase 中所做的是这样的:
protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
base.OnActionExecuted(filterContext);
var authData = GetUserData();
if (authData != null)
{
var result = filterContext.Result as ViewResult;
if (result != null)
{
var vm = result.Model as ViewModelBase;
if (vm != null)
{
vm.UserId = authData.UserID;
vm.UserName = User.Identity.Name;
}
}
}
}
否则你可以做的,因为我希望你的 ViewModel 是不同的类型,是在 ControllerBase 中创建一个类似的方法:
注意这不符合您的要求。我只是展示了一种使用一些初始化代码创建派生类的新实例的技术。
protected T Command<T>() where T : BaseCommand, new()
{
var command = new T();
command.IP = Request.UserHostAddress;
if (User != null && User.Identity.IsAuthenticated)
{
var authData = GetUserData();
if (authData != null)
{
command.UserId = authData.UserID;
}
}
return command;
}
哪个将用作
var command = Command<CreateUserCommand>();