最近转换到.NET Core后,我在尝试使用我们的任何AuthProviders进行身份验证时遇到以下错误:
";尝试从适配器"NetCoreContationrAdapter"解析服务"System.Boolean"时出错:对象引用未设置为对象的实例">
我在.NET Core 3.1上使用ServiceStack.Core 5.9.2。
堆栈跟踪
at Funq.Container.GetEntry[TService,TFunc](String serviceName, Boolean throwIfMissing) in C:BuildAgentwork3481147c480f4a2fsrcServiceStackFunqContainer.cs:line 490
at Funq.Container.ResolveImpl[TService](String name, Boolean throwIfMissing) in C:BuildAgentwork3481147c480f4a2fsrcServiceStackFunqContainer.cs:line 183
at Funq.Container.TryResolveNamed[TService](String name) in C:BuildAgentwork3481147c480f4a2fsrcServiceStackFunqContainer.Overloads.cs:line 389
at Funq.Container.TryResolve[TService]() in C:BuildAgentwork3481147c480f4a2fsrcServiceStackFunqContainer.Overloads.cs:line 336
at Funq.Container.<>c__DisplayClass16_0`4.<ReverseLazyResolve>b__1(TArg1 a1, TArg2 a2, TArg3 a3) in C:BuildAgentwork3481147c480f4a2fsrcServiceStackFunqContainer.Adapter.cs:line 125
at ServiceStack.Auth.AuthProvider.IsAccountLocked(IAuthRepository authRepo, IUserAuth userAuth, IAuthTokens tokens) in C:BuildAgentwork3481147c480f4a2fsrcServiceStackAuthAuthProvider.cs:line 359
at Authentication.AuthUtilities.HandleSuccessfulTryAuthenticate(CredentialsAuthProvider authProvider, IServiceBase authService, User user, IDbConnection db) in AuthUtilities.cs:line 100
at Authentication.AuthProviders.SgCredentialsAuthProvider.TryAuthenticate(IServiceBase authService, String userName, String password) in SGCredentialsAuthProvider.cs:line 31
at ServiceStack.Auth.CredentialsAuthProvider.Authenticate(IServiceBase authService, IAuthSession session, String userName, String password, String referrerUrl) in C:BuildAgentwork3481147c480f4a2fsrcServiceStackAuthCredentialsAuthProvider.cs:line 120
at ServiceStack.Auth.CredentialsAuthProvider.Authenticate(IServiceBase authService, IAuthSession session, Authenticate request) in C:BuildAgentwork3481147c480f4a2fsrcServiceStackAuthCredentialsAuthProvider.cs:line 98
at ServiceStack.Auth.AuthenticateService.Authenticate(Authenticate request, String provider, IAuthSession session, IAuthProvider oAuthConfig) in C:BuildAgentwork3481147c480f4a2fsrcServiceStackAuthAuthenticateService.cs:line 413
at ServiceStack.Auth.AuthenticateService.Post(Authenticate request) in C:BuildAgentwork3481147c480f4a2fsrcServiceStackAuthAuthenticateService.cs:line 218
您的SgCredentialsAuthProvider
在国际奥委会注册了吗?它只应该作为AuthProvider添加到您的AuthFeature
插件注册中。
该错误表明您有一个自动连接的服务或具有公共bool
属性或构造函数的依赖项,该属性或构造函数正试图注入从IsAccountLocked((方法调用的不存在的bool
依赖项:
public virtual bool IsAccountLocked(IAuthRepository authRepo, IUserAuth userAuth, IAuthTokens tokens=null)
{
if (AccountLockedValidator != null)
return AccountLockedValidator(authRepo, userAuth, tokens);
return userAuth?.LockedDate != null;
}
从其执行情况来看,国际奥委会正试图解决国际奥委会提出的AccountLockedValidator
的每个通用论点,但在bool
通用论点上失败了:
public Func<IAuthRepository, IUserAuth, IAuthTokens, bool> AccountLockedValidator { get; set; }
删除SgCredentialsAuthProvider
的IOC注册,或者如果你正在进行依赖项的自动扫描/自动布线,则忽略它应该可以解决这个问题。