ASP.NETコアIDとエンティティフレームワークでドキュメントを読み込もうとしました。しかし、私はまだ賢明ではないと感じています。Entity FrameworkカスタムのASP .NETコアIDカスタムDbContext
私はIdentityDbContext
、IdentityUser
、IdentityRole
とは関係がありません。私はちょうど私の自身のDbContext
実装を使用してUserManager
、UserStore
、RoleManager
、SignInManager
、および他のものの中で署名に関わるクラスで楽しく仕事をしたい。
だから、そのデフォルトASP.NETコアプロジェクトを作成した、と言われて「個人ユーザーアカウント」を使用します。今、私はDIワイヤアップがそのコントローラが "働く"ために必要とされるものを理解したいと思います。アカウントコントローラのコンストラクタを見てみると
:それとともに
public AccountController(UserManager<ApplicationUser> userManager,
SignInManager<ApplicationUser> signInManager,
IOptions<IdentityCookieOptions> identityCookieOptions,
IEmailSender emailSender,
ISmsSender smsSender,
ILoggerFactory loggerFactory)
は、次の関連クラスが生成されます。
public class ApplicationUser : IdentityUser
{
}
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
...
}
そして、いくつかの関連DI構成:
public void ConfigureServices(IServiceCollection services)
{
...
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
...
app.UseIdentity();
}
掘削ASP.NET Core Identityのソースコードでは、UserStoreは強制的に制約を適用しますIdentityUser
にあります。
public class AuthenticationDbContext : DbContext
{
public AuthenticationDbContext(DbContextOptions options) : base(options)
{
}
public DbSet<ApplicationUser> ApplicationUsers { get; set; }
public DbSet<ApplicationRole> ApplicationRoles { get; set; }
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.Entity<ApplicationUser>(te =>
te.HasKey(user => user.Id));
builder.Entity<ApplicationRole>(te =>
te.HasKey(role => role.Id));
}
}
public class ApplicationRole
{
public int Id { get; set; }
public string UserName { get; set; }
}
public class ApplicationUser
{
public int Id { get; set; }
public Guid Guid { get; set; }
public string GivenName { get; set; }
public string FamilyName { get; set; }
public string MiddleName { get; set; }
public DateTime? DateOfBirth { get; set; }
public string UserName { get; set; }
public string EmailAddress { get; set; }
}
私は私が持っていた問題、例外らが記載されている場合は、この記事が長すぎるだろう:初心者のために - 私が仕事をしたい何のため
public class UserStore : UserStore<IdentityUser<string>>
は、次のようなものです。
問題は、これをDI構成でどのように配線するのですか?
私は今、AccountControllerコンストラクタが呼び出され、依存関係が注入されるように「実行中」の何かを持っています。これは、カスタムApplicationUserStoreとApplicationRoleStoreを実装することを中心に行われています。私は一度これを把握するソリューションを投稿します。 – Andez
これは既にConfigureServicesメソッドに組み込まれています... – mvermef
上記は動作しません。 DIサービスでさまざまな組み合わせを追加することで、すべてのクラスの実装を試してみたので、私は意図的にエラーを出しませんでした.AddIdentity(...)。AddXXX。私は後で家に戻って質問を言い換えるつもりです。 – Andez