私のプロジェクトでは、ほとんどのアクションが 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>();