解决 ASP.NET Core DI 中的自定义 IdentityErrorDescriber

问题描述 投票:0回答:1

我基于 this

 方法创建了一个自定义 
IdentityErrorDescriber,并像这样注册:

services
  .AddIdentityCore<CustomUser>()
  .AddErrorDescriber<CustomIdentityErrorDescriber>()
  // ...

我需要剃刀页面模型中的一个实例,它具有以下构造函数:

public RegisterModel(CustomIdentityErrorDescriber errorDescriber, /* ... */)
{
  // ...
}

但是我在请求该页面时遇到异常:

System.InvalidOperationException:尝试激活“MyProject.Pages.RegisterModel”时无法解析类型“Microsoft.AspNetCore.Identity.CustomIdentityErrorDescriber”的服务。

如果我将 ctor 更改为使用默认的

IdentityErrorDescriber
类型,那么它就可以工作。有趣的是,它实际上是
CustomIdentityErrorDescriber

的一个实例

如何解析自定义类型?我必须单独注册它(在这种情况下,我必须以某种方式从容器中取消注册默认实现)吗?

asp.net-core dependency-injection razor-pages asp.net-core-identity asp.net-core-7.0
1个回答
0
投票

弄清楚了...这是一个注册问题。

这个:

.AddErrorDescriber<CustomIdentityErrorDescriber>()

工作像这样

public IdentityBuilder AddErrorDescriber<T>() where T : IdentityErrorDescriber
{
  Services.AddScoped<IdentityErrorDescriber, T>();
  return this;
}

所以解决办法是:

services
  // ...
  .AddErrorDescriber<CustomIdentityErrorDescriber>();

services.AddScoped<CustomIdentityErrorDescriber>();

那么同一个描述器对象可以解析为

IdentityErrorDescriber
CustomIdentityErrorDescriber

© www.soinside.com 2019 - 2024. All rights reserved.