私は ASP.NET MVC Web サイトで作業しており、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
}