2016-11-02 13 views
1

まず、物事、私の問題は、私はマイクロソフトからのアイデンティティのサンプルを通じてつもりですジェクトRoleManager結果最初

このSO linkに似ていますが、同じではありません。私はユーザー認証だけでそれを始め、それは働いた。最初にデータベースを使用したいのでDBを削除しました。今私はロールを取り入れようとしています。私のDBのエンティティのような設定されている

public class ApplicationDbContext : IdentityDbContext<ApplicationUser, IdentityRole<int>, int> 
{ 
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) 
     : base(options) 
    { 
    } 

    protected override void OnModelCreating(ModelBuilder builder) 
    { 
     base.OnModelCreating(builder); 

     builder.Entity<ApplicationUser>(e => 
     { 
      e.ToTable("User").HasKey(x => x.Id); 
      e.Property(x => x.Id).HasColumnName("UserId"); 
     }); 

     builder.Entity<IdentityRole<int>>(e => 
     { 
      e.ToTable("Role").HasKey(x => x.Id); 
      e.Property(x => x.Id).HasColumnName("RoleId"); 
     }); 

と私の状況、ユーザー設定

私のセットアップは、ユーザーのために、この(役割なしで動作)と役割(動作しませんでした)のようなものです(私は、元IdentityRoleを使用して保存しておきたい)ConfigureServicesで

public class ApplicationDbContext : IdentityDbContext<ApplicationUser, IdentityRole<int>, int> 
{ 
} 
public class ApplicationUser : IdentityUser<int> 
{ 
} 

AccountControllerで7​​

、私はこれを試してみました:

[Authorize] 
public class AccountController : Controller 
{ 
    private readonly UserManager<ApplicationUser> _userManager; 
    private readonly RoleManager<IdentityRole> _roleManager; 
    private readonly SignInManager<ApplicationUser> _signInManager; 
    private readonly IEmailSender _emailSender; 
    private readonly ISmsSender _smsSender; 
    private readonly ILogger _logger; 

    public AccountController(
     UserManager<ApplicationUser> userManager, 
     RoleManager<IdentityRole> roleManager, 
     SignInManager<ApplicationUser> signInManager, 
     IEmailSender emailSender, 
     ISmsSender smsSender, 
     ILoggerFactory loggerFactory) 
    { 
     _userManager = userManager; 
     _roleManager = roleManager; 
     _signInManager = signInManager; 
     _emailSender = emailSender; 
     _smsSender = smsSender; 
     _logger = loggerFactory.CreateLogger<AccountController>(); 
    } 

アプリはまだブラウザにロードし、それは私が前にログインしてきたが、私は、たとえばログアウトしようとしたとき、私はこのエラーを取得することを覚えている:

InvalidOperationException: Unable to resolve service for type 'Microsoft.AspNetCore.Identity.RoleManager`1[MyProj.Web.Models.MyViewModels.ApplicationRole]' while attempting to activate 'MyProj.Web.Controllers.AccountController'.

答えて

1

RoleManager<IdentityRole>RoleManager<IdentityRole<int>>に置き換えると正常に動作します。

+0

私はこれを以前のように間違った構成で試してみましたが、これを試しても動作しなかったことに留意してください。ありがとう! – user1019042

+0

例外メッセージは、あなたが 'MyProj.Web.Models.MyViewModels.ApplicationRole'を使用していることを示しているようです。それが本当であれば、あなたのコードのどこかで 'IdentityRole'も使用していないことを確認してください。 – Pinpoint

関連する問題