【问题标题】:.NET Core Web API An exception was thrown while activating.NET Core Web API 激活时引发异常
【发布时间】:2019-05-15 17:47:18
【问题描述】:

向我的 Web api 发送发布请求时出现以下异常:

Autofac.Core.DependencyResolutionException:抛出异常 在激活 WAM4.WebAPI.Core.UseCases.RegisterUserUseCase -> WAM4.WebAPI.Infrastructure.Data.Repositories.UserRepository -> Microsoft.AspNetCore.Identity.UserManager1[[WAM4.WebAPI.Infrastructure.Identity.AppUser, WAM4.WebAPI.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]. ---> Autofac.Core.DependencyResolutionException: None of the constructors found with 'Autofac.Core.Activators.Reflection.DefaultConstructorFinder' on type 'Microsoft.AspNetCore.Identity.UserManager1[WAM4.WebAPI.Infrastructure.Identity.AppUser]' 可以使用可用的服务和参数调用: 无法解析参数'Microsoft.AspNetCore.Identity.IUserStore1[WAM4.WebAPI.Infrastructure.Identity.AppUser] store' of constructor 'Void .ctor(Microsoft.AspNetCore.Identity.IUserStore1[WAM4.WebAPI.Infrastructure.Identity.AppUser], Microsoft.Extensions.Options.IOptions1[Microsoft.AspNetCore.Identity.IdentityOptions], Microsoft.AspNetCore.Identity.IPasswordHasher1[WAM4.WebAPI.Infrastructure.Identity.AppUser], System.Collections.Generic.IEnumerable1[Microsoft.AspNetCore.Identity.IUserValidator1[WAM4.WebAPI.Infrastructure.Identity.AppUser]], System.Collections.Generic.IEnumerable1[Microsoft.AspNetCore.Identity.IPasswordValidator1[WAM4.WebAPI.Infrastructure.Identity.AppUser]], Microsoft.AspNetCore.Identity.ILookupNormalizer, Microsoft.AspNetCore.Identity.IdentityErrorDescriber, System.IServiceProvider, Microsoft.Extensions.Logging.ILogger1[Microsoft.AspNetCore.Identity.UserManager1[WAM4.WebAPI.Infrastructure.Identity.AppUser]])'。

这些是我将“build()”放入容器和 AppUser 类的 2 个模块:

    public class InfrastructureModule : Module
        {
            protected override void Load(ContainerBuilder builder)
            {
                builder.RegisterType<UserRepository>().As<IUserRepository>().InstancePerLifetimeScope();
                builder.RegisterType<JwtFactory>().As<IJwtFactory>().SingleInstance().FindConstructorsWith(new InternalConstructorFinder());
                builder.RegisterType<JwtTokenHandler>().As<IJwtTokenHandler>().SingleInstance().FindConstructorsWith(new InternalConstructorFinder());
                builder.RegisterType<TokenFactory>().As<ITokenFactory>().SingleInstance();
                builder.RegisterType<JwtTokenValidator>().As<IJwtTokenValidator>().SingleInstance().FindConstructorsWith(new InternalConstructorFinder());
                builder.RegisterType<Logger>().As<ILogger>().SingleInstance();
            }
        }


public class CoreModule : Module
    {
        protected override void Load(ContainerBuilder builder)
        {
            builder.RegisterType<RegisterUserUseCase>().As<IRegisterUserUseCase>().InstancePerLifetimeScope();
            builder.RegisterType<LoginUseCase>().As<ILoginUseCase>().InstancePerLifetimeScope();
            builder.RegisterType<ExchangeRefreshTokenUseCase>().As<IExchangeRefreshTokenUseCase>().InstancePerLifetimeScope();
        }
    }

using Microsoft.AspNetCore.Identity;
//using System;
//using System.ComponentModel.DataAnnotations;

namespace WAM4.WebAPI.Infrastructure.Identity
{
    public class AppUser : IdentityUser
    {
        //Add additional profile data for application users by adding properties to this class
        //[Required]
        //[MaxLength(100)]
        //public string FirstName { get; set; }

        //[Required]
        //[MaxLength(100)]
        //public string LastName { get; set; }

        ////[Required]
        ////public byte SecurityLevel { get; set; }

        //[Required]
        //public DateTime CreateDate { get; set; }

        //public int Pending { get; set; }

        //public string Avatar { get; set; }
    }
}

我检查了 UserRepository 是否在 Load 中正确注册,并且 AppUser 类已正确编译。任何关于我应该研究什么领域来解决这个异常的指导,将不胜感激。

【问题讨论】:

  • 为了提高您获得高质量答案的机会,请确保您的问题包含MCVE

标签: c# asp.net-core dependency-injection autofac


【解决方案1】:

如果没有您的注册,这有点难以准确判断,但您的容器中似乎缺少IUserStore 的注册。您能否通过例如验证它是否已注册?完成所有注册后进行解析?

既然是泛型接口IUserStore&lt;TUser&gt;,有没有可能你没有用WAM4.WebAPI.Infrastructure.Identity.AppUser注册正确的泛型版本

【讨论】:

  • 我没有看到 AppUser 正在注册 IUserStore。然而,它确实实现了 IdentityUser。我正在按照我在网上找到的模板进行操作,该模板可以在我的计算机上编译并正常工作。该模板也没有显式注册 IUserStore ...
  • 如果您的计算机运行良好,您会如何收到错误消息?不确定我是否理解你。如果你的构造函数中有 IUserStore 参数,你必须注册它,它不会自己注册。 DI 容器无法注入未注册的内容
  • 我有一个从 github 下载的源代码示例,它可以工作。我遵循了它的教程并尝试从头开始复制它,这是一个不起作用的。我将尝试注册 IUserStore ...我正在关注的源代码在此链接中,以防有人想知道:fullstackmark.com/post/19/…
  • 关于我应该使用什么类 Registertype 的帮助?由 ..... builder.RegisterType<....>.As>.InstancePerLifeTimeScope(); 表示
  • 很遗憾,我无法告诉您您需要注册的具体内容是什么,因为我没有 100% 了解使用这些课程的详细信息。它可能不是直接注册,而是通过一些AddUserStore 扩展方法间接注册。由于您使用自己的类,我假设您应该阅读如何实现自定义存储并将其连接到文档中的 DI。我在这里也找到了一些信息stackoverflow.com/questions/30453567/…。也许您需要实现一些自定义用户存储并注册它
【解决方案2】:

好吧,我知道我做错了什么。

我从模板 Startup.cs 中省略了 JWTToken 代码,因为我还没有到达那部分。大错误,一整天都在想这是一个不同的问题...使我的 startup.cs 与我遵循的模板相同(包括所有 JWT 和身份验证代码)...和 ​​BAM,轻松修复。只花了整整 8 个小时来弄清楚我做错了什么。

感谢 llya 提供的帮助,非常感谢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-07
    • 2019-10-22
    • 2021-04-21
    • 1970-01-01
    • 2021-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多