使用Aspnet Core Identiy实现CQRS时如何注册处理程序

时间:2019-05-17 14:58:35

标签: asp.net-core asp.net-identity mediatr

我正在尝试使用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(Type   serviceType,Type ImplementationType,CallSiteChain,callSiteChain,   ParameterInfo []参数,布尔型throwIfCallSiteNotFound)

     

InvalidOperationException:构造请求处理程序时出错   类型   MediatR.IRequestHandler`2 [MyCore.MyApp.Application.Users.Commands.Register.RegisterCommand,System.Object]。

在容器中注册您的处理程序。有关示例,请参见GitHub中的示例。

任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:0)

添加服务以解决启动文件中的DbContext

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

答案 1 :(得分:0)

我认为以下代码没有问题

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")));