0

私は 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
}
4

1 に答える 1