我正在使用 ASP.NET MVC 网站,我们正在利用 DI 将必要的组件注入到我们的控制器中。
我目前面临的挑战是我想将服务提供者注入控制器并将“UserRequestContext”对象注入服务提供者。
UserRequestContext 对象封装了当前用户 ID、电子邮件地址、角色,并且还传递了 modelstate 对象(或者至少,我希望这样)。我想在我的服务提供者层执行所有验证操作。
当然,问题是我的服务提供者对象必须在控制器之前实例化,并且因为在创建控制器之前 ModelState 不存在,所以我无法创建 UserRequestContext 对象。
我的目标是消除将 IUserRequestContext 对象传递给 IServiceProvider 的每个方法的需要。
取而代之的是: void ServiceProvider.CreateUser(User user, IUserRequestContext userRequestContext);
使用这个: void ServiceProvider.CreateUser(User user)
这是我此时处理的代码:
public class HomeController
{
public HomeController(IServiceProvider provider)
{
_provider = provider;
}
private IServiceProvider _provider;
}
public class ServiceProvider : IServiceProvider
{
private IUserRequestContext _userRequestContext;
public ServiceProvider(IUserRequestContext userRequestContext)
{
_userRequestContext = userRequestContext;
}
}
public class UserRequestContext : IUserRequestContext
{
private ModelStateDictionary _modelState;
public UserRequestContext(ModelStateDictionary modelState)
{
_modelState = modelState;
}
public void AddError(string key, string errorMessage)
{
_modelState.AddModelError(key, errorMessage);
}
// the rest removed for brevity
}