我基于 this
方法创建了一个自定义
IdentityErrorDescriber
,并像这样注册:
services
.AddIdentityCore<CustomUser>()
.AddErrorDescriber<CustomIdentityErrorDescriber>()
// ...
我需要剃刀页面模型中的一个实例,它具有以下构造函数:
public RegisterModel(CustomIdentityErrorDescriber errorDescriber, /* ... */)
{
// ...
}
但是我在请求该页面时遇到异常:
System.InvalidOperationException:尝试激活“MyProject.Pages.RegisterModel”时无法解析类型“Microsoft.AspNetCore.Identity.CustomIdentityErrorDescriber”的服务。
如果我将 ctor 更改为使用默认的
IdentityErrorDescriber
类型,那么它就可以工作。有趣的是,它实际上是 CustomIdentityErrorDescriber
! 的一个实例
如何解析自定义类型?我必须单独注册它(在这种情况下,我必须以某种方式从容器中取消注册默认实现)吗?
弄清楚了...这是一个注册问题。
这个:
.AddErrorDescriber<CustomIdentityErrorDescriber>()
工作像这样:
public IdentityBuilder AddErrorDescriber<T>() where T : IdentityErrorDescriber
{
Services.AddScoped<IdentityErrorDescriber, T>();
return this;
}
所以解决办法是:
services
// ...
.AddErrorDescriber<CustomIdentityErrorDescriber>();
services.AddScoped<CustomIdentityErrorDescriber>();
那么同一个描述器对象可以解析为
IdentityErrorDescriber
和 CustomIdentityErrorDescriber
。