Как зарегистрировать обработчики при внедрении CQRS с Aspnet Core Identiy - PullRequest
0 голосов
/ 17 мая 2019

Я пытаюсь зарегистрироваться, мои пользователи, используя CQRS.

Я регистрируюсь в MediatR:

services.AddMediatR(typeof(MyCommand).GetTypeInfo().Assembly);


public class Handler : IRequestHandler<RegisterCommand, object>
        {
            private readonly MyDbContext _context;
            private readonly IMediator _mediator;
            private readonly UserManager<User> _userManager;

            public Handler(IYawaMVPDbContext context, IMediator mediator, UserManager<User> userManager)
            {
                _context = context;
                _mediator = mediator;
                _userManager = userManager;
            }
}

Я получаю следующие исключения:

InvalidOperationException: невозможно разрешить службу для типа «MyDbContext» при попытке активации 'Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserOnlyStore 6[MyCore.Domain.Entities.User,MyCore.MyApp.Persistence.MyDbContext,System.String,Microsoft.AspNetCore.Identity.IdentityUserClaim 1 [System.String], Microsoft.AspNetCore.Identity.IdentityUserLogin 1[System.String],Microsoft.AspNetCore.Identity.IdentityUserToken 1 [System.String]]'. Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateArgumentCallSites (Тип serviceType, Тип реализации типа, CallSiteChain callSiteChain, ParameterInfo [] параметры, bool throwIfCallSiteNotFound)

InvalidOperationException: Ошибка при построении обработчика для запроса тип MediatR.IRequestHandler`2 [MyCore.MyApp.Application.Users.Commands.Register.RegisterCommand, System.Object].

Зарегистрируйте ваши обработчики в контейнере. Смотрите примеры в GitHub.

Любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 17 мая 2019

Я думаю, что следующий код не имеет проблем

services.AddMediatR(typeof(MyCommand).GetTypeInfo().Assembly);

обрабатывает все MediatR IRequest и IRequestHandlers.

, но вы создали интерфейс IYawaMVPDbContext и его класс реализации, который не может быть обработантем самым MediatR.Extensions.Microsoft.DependencyInjection

DBContext регистрируется с внедрением зависимостей во время запуска приложения, чтобы их можно было автоматически предоставлять компонентам, которые используют службы - зарегистрируйте это вручную, например

services.AddDbContext<IYawaMVPDbContext, DbContextImplementation>(options => options.UseSqlServer(Configuration.GetConnectionString("ConnectionString")));

0 голосов
/ 17 мая 2019

Добавить службу для разрешения DbContext в файле запуска

services.AddDbContext<IYawaMVPDbContext, YourDbContextImplementation>(options =>
                options.UseSqlServer(Configuration.GetConnectionString("yourConnectionString")));
...