2017-06-11 37 views
9

ログインコントローラでこのエラーが発生しました。ここ'Microsoft.AspNetCore.Identity.UserManager`のサービスを' AuthController 'をアクティブ化しようとしているときに解決できません

InvalidOperationException: Unable to resolve service for type 'Microsoft.AspNetCore.Identity.UserManager`1[Automobile.Models.Account]' while attempting to activate 'Automobile.Server.Controllers.AuthController'.

認証コントローラのコンストラクタです:あなたはSignInManager、UserManagerの中に同一のユーザデータモデルを使用する必要が

public void ConfigureServices(IServiceCollection services) 
    { 
     // Add framework services. 
     services.AddApplicationInsightsTelemetry(Configuration); 
     services.Configure<AppConfig>(Configuration.GetSection("AppSettings")); 

     //var provider = HttpContext.ApplicationServices; 
     //var someService = provider.GetService(typeof(ISomeService)); 


     services.AddDbContext<Providers.Database.EFProvider.DataContext>(options => options 
      .UseSqlServer(Configuration.GetConnectionString("DefaultConnection"), 
       b => b.MigrationsAssembly("Automobile.Server") 
      )); 


     services.AddIdentity<IdentityUser, IdentityRole>(options => 
     { 
      options.User.RequireUniqueEmail = false; 
     }) 
     .AddEntityFrameworkStores<Providers.Database.EFProvider.DataContext>() 
     .AddDefaultTokenProviders(); 
     //services.AddScoped<SignInManager<Automobile.Models.Account>, SignInManager<Automobile.Models.Account>>(); 
     //services.AddScoped<UserManager<Automobile.Models.Account>, UserManager<Automobile.Models.Account>>(); 

     services.AddMvc(); 
     App.Service = services.BuildServiceProvider(); 

     // Adds a default in-memory implementation of IDistributedCache. 
     services.AddDistributedMemoryCache(); 

     services.AddSession(options => 
     { 
      // Set a short timeout for easy testing. 
      options.IdleTimeout = TimeSpan.FromSeconds(10); 
      options.CookieHttpOnly = true; 
     }); 

    } 
+11

基本的なユーザークラスとして 'IdentityUser'を登録していますが、あなたが使用しているのは、もちろんAutomotive.Models.Accountです。ASP.NET IDによってはどこにも登録されていません。 –

+0

@FedericoDipumaありがとうそんなに:) – OMID

+0

どうやって解決しましたか? – Lobato

答えて

4

と:

private SignInManager<Automobile.Models.Account> _signManager; 
    private UserManager<Automobile.Models.Account> _userManager; 

    public AuthController(UserManager<Models.Account> userManager, 
          SignInManager<Automobile.Models.Account> signManager) 
    { 
     this._userManager = userManager; 
     this._signManager = signManager; 
    } 

、ここではstartup.csでConfigureServicesですservices.AddIdentity。独自のカスタムアプリケーションロールモデルクラスを使用している場合は、同じプリンシパルがtrueになります。だから、

、単に答えを明確にすることが

services.AddIdentity<Automobile.Models.Account, IdentityRole>(options => 
    { 
     options.User.RequireUniqueEmail = false; 
    }) 
    .AddEntityFrameworkStores<Providers.Database.EFProvider.DataContext>() 
    .AddDefaultTokenProviders(); 
+0

私は同様の問題を抱えています。私の顧客のユーザーと役割はAddIdentityメソッドで定義されていますが、私はまだ同じエラーが発生しています。どんな考え?コードを別のスレッドに投稿することができます。 – devC

+0

コードを記入してください。 – HojjatK

+0

実際には、私はその問題を解決しましたが、今はDB接続の作成に問題があります。私は問題を投稿します。 – devC

1

services.AddIdentity<IdentityUser, IdentityRole>(options => 
    { 
     options.User.RequireUniqueEmail = false; 
    }) 
    .AddEntityFrameworkStores<Providers.Database.EFProvider.DataContext>() 
    .AddDefaultTokenProviders(); 

を変更:

あなたはstartup.csでクラスApplicationUserを使用する場合:services.AddIdentity<ApplicationUser, IdentityRole>()

を私はあなたのコントローラで同じクラスを使用する必要がありますそれをnjecting:

public AccountController(UserManager<ApplicationUser> userManager) 

あなたのような他のいくつかのクラスを使用する場合:

public AccountController(UserManager<IdentityUser> userManager) 

、あなたはこのエラーを取得します:あなたは、スタートアップでApplicationUserを使用しているため

InvalidOperationException: Unable to resolve service for type 'Microsoft.AspNetCore.Identity.UserManager`1[IdentityUser]' 

を、ないIdentityUserので、このタイプは注入システムに登録されていません。

関連する問題