如何在ASP.NET核心中更改Usermanager的dbcontext



我有两个数据库。

  • application_db
  • 注册表_DB

application_db 用于应用程序进行工作并使用 ApplicationDbContext

Registry_db 用于管理所有帐户。我想先通过我的注册表服务创建一个帐户,然后将创建的帐户(信息更少(插入应用程序db 中。Registry_db正在使用 RegistryDBContext

我已经成功地注入了两个上下文(ApplicationDbContext&registrydbContext(,在我的注册注入中。

我的启动看起来像这样:

services.AddCors();
services
.AddDbContext<RegistryDbContext>(
        options => options
        .UseNpgsql(
            Configuration.GetConnectionString("DefaultConnection"),
            b => b.MigrationsAssembly("Codeflow.Registry")
        )
    );
services
    .AddDbContext<ApplicationDbContext>(
    options => options
    .UseNpgsql(
            Configuration.GetConnectionString("ProductionConnection"),
        b => b.MigrationsAssembly("Codeflow.Registry")
    )
);

在我的注册表服务中,我可以在依赖项注入并创建帐户上获得UserManager。在默认情况下,UserManager使用registristrydbcontext。一旦通过注册表服务成功创建帐户后,我想在 application_db (通过applicationdbcontext(中创建相同的帐户。但是我陷入了这条代码

// first I am creating the account in registry_db
var result = await _userManager.CreateAsync(user, model.Password);
if (result.Succeeded)
{ 
    // once the account is created, I would like to create the account on application_db     
    // here I am getting the dbContext for the application_db
    // I can get it also over the dependency injection if needed
    using (ApplicationDbContext dbCtx = new ApplicationDbContext())
    {
         // Here I am getting the Error. The context is ok, but an error appeard with ApplicationUser.
         var test = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(dbCtx));
    }
}

我收到此错误消息:

错误:没有给出与所需的参数 格式参数 'usermanager的"选项"。Usermanager(iuserstore,ioptions, ipasswordhasher, ienumerable>, ienumerable>,iLookupnormalizer, IdentityErrordescriber,IserviceProbider, ilogger>('

我的应用程序器类看起来像这样:

public class ApplicationUser : IdentityUser<Guid>
{
    public Guid GenderId { get; set; }
    [ForeignKey("GenderId")]
    public Gender Gender { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public DateTime BirthDay { get; set; }
}

有什么问题或缺少什么?我已经尝试在这里关注这篇文章,但没有运气。是否有其他方法可以创建具有其他上下文的UserManager实例?

using (var db = new TenantDBContext("connectionString"))
{
    db.Database.Migrate();
    var store = new UserStore<IdentityUser>(db);
    var user = new IdentityUser("test");
    var result = await store.CreateAsync(user);
}

它是对构造变量的依赖性注入。使用DI,您不应直接初始化服务。您应该在Startup.cs中注册您的服务和ApplicationContext。

当您需要服务时,应将其通过构造函数注入控制器,而DI链将自动将ApplicationContext实例注入服务。

当然,如果您不需要控制器中的每种方法的服务,则可以将其初始化为方法:

[Route("api/[controller]")]
public class MyController : Controller
{
    [HttpGet]
    public async IEnumerable<object> Get([FromServices] ApplicationContext context,
                                         MyType myMainParam)
    {
        ...
    }
}

但是,您真正需要做的是实现自己的UserManagerFactory版本,此链接可能会有所帮助。

这篇文章也可能会有所帮助。

P.S:

查看此线程中的 @Singularity222答案。他在他的仓库中做了您想做的同样的事情。

也有此线程,身份项目的所有者(!(说您需要实现自己的UserStore版本。

我认为您是在引用错误的组件。

其构造函数仅收到一个参数的UserManager类不是ASP.NET核心Usermanager,而是ASP.NET USERMANAGER。请检查以下详细信息

ASP.NET USERMANAGER (Microsoft.aspnet.Identity.Core.dll(:https://msdn.microsoft.com/en-us/library/dn468199(v = vs.108(.aspx

asp.net core usermanager (microsoft.aspnetcore.identity.dll,microsoft.extensions.inderity.core.core.dll(:https://lealen.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.identity.sideity.usermanager-1?view= aspnetcore-2.0

所以我的建议是,修复您的身份库的引用到使用.NET Core One。

相关内容

  • 没有找到相关文章