4

IAsyncRequestHandler で IRequest を実行すると、次のエラー メッセージが表示されます。

System.InvalidOperationException: 'No service for type 'MediatR.IRequestHandler`2[TestProject.Domain.Requests.Users.CreateUserRequest,TestProject.Domain.Requests.Users.CreateUserResponse]' has been registered.'

これは、スタートアップクラスに登録する方法です

// Add framework services.
services.AddMvc();
services.AddMediatR(typeof(CreateUserRequest).GetTypeInfo().Assembly);

CreateUserRequest と Response

public class CreateUserRequest : IRequest<CreateUserResponse>
{
    public string EmailAddress { get; set; }
    public int OrganisationId { get; set; }
    public string Password { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

public class CreateUserResponse
{
    public int UserId { get; set; }
    public string EmailAddress { get; set; }
}

リクエストハンドラ

public class CreateUserRequestHandler : IAsyncRequestHandler<CreateUserRequest, CreateUserResponse>
{
    private readonly UserManager<User> _userManager;


    public CreateUserRequestHandler()
    {

    }

    public async Task<CreateUserResponse> Handle(CreateUserRequest request)
    {
        //create the user and assign it to the organisation
        var user = new User
        {
            Email = request.EmailAddress,
            OrganisationUsers = new List<OrganisationUser> { new OrganisationUser { OrganisationId = request.OrganisationId } }
        };

        //create new user with password.
        await _userManager.CreateAsync(user, request.Password);

        //create response.
        var response = new CreateUserResponse{UserId = user.Id, EmailAddress = user.Email};

        return response;
    }
}

コントローラ クラス

public class UserController : Controller
{
    private readonly IMediator _mediator;

    public UserController(IMediator mediator)
    {
        _mediator = mediator;
    }

    [HttpPost]
    public async Task<CreateUserResponse> Post(CreateUserRequest request)
    {
        return await _mediator.Send(request);
    }
}

エラーはコントローラークラス内で発生し、非同期リクエストハンドラーにヒットしません。

DI登録に問題はありますか?例を見ましたが、aspnet コアに固有のものは見つかりませんでした。

4

0 に答える 0