我正在使用ASP.NET MVC網站,我們正在使用DI將必要的組件注入到控制器中。將ModelState傳遞到業務層
我現在面臨的挑戰是我想將服務提供者注入控制器,並將一個「UserRequestContext」對象注入到服務提供者中。這個UserRequestContext對象封裝了當前的用戶ID,電子郵件地址,角色,並傳遞了modelstate對象(或者至少,我希望它)。我想在我的服務提供者層執行所有驗證操作。
問題當然是,我的服務提供者對象必須在控制器之前實例化,並且因爲在創建控制器之前ModelState不存在,所以我無法創建UserRequestContext對象。
我的目標是消除需要將IUserRequestContext對象傳遞給IServiceProvider的每個方法。
取而代之的是: void ServiceProvider.CreateUser(User user,IUserRequestContext userRequestContext);
使用此: 無效ServiceProvider.CreateUser(用戶用戶)
這是我在這一點上整理了一下代碼:
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
}