集成ASP.NET标识的最佳实践 - 它们是否存在?

时间:2013-11-15 22:24:15

标签: asp.net .net entity-framework entity-framework-6 asp.net-identity

我正在使用一个新网站的ASP.NET身份,并且似乎没有很多(任何?)示例如何以分离的方式执行此操作。我不希望我的域模型的DomainUser类必须从Microsoft.AspNet.Identity.EntityFramework.User继承,所以我创建了一个如下所示的类:

public class IdentityUser : User
{
    public virtual DomainUser DomainUser { get; private set; }
}

我已将ASP.NET Identity所需的DbSet移动到与我的域模型as illustrated in this answer相同的派生DbContext类中。我通过Fluent API将IdentityUser单向链接到DomainUser,如下所示:

modelBuilder.Entity<IdentityUser>().HasRequired(iu => iu.DomainUser).WithRequiredPrincipal();

这使我能够主要将授权和身份验证的问题与DomainUser类中定义的行为分开。这比将它们组合成一个类更好,但它仍然感觉很难看。我仍然在我的Domain项目中引用了所需的ASP.NET Identity程序集。我可以创建另一个项目,该项目仅包含我的IdentityUser类和对我的域程序集的引用以允许导航属性,但这开始让人感到困惑。

我觉得应该有更好,更清晰,更模块化的方式将Identity链接到域而不会导致紧密耦合。

有没有人想出更好的处理方法?我希望能引起ASP.NET身份项目(Hao Kung等)参与者的注意,为此提供方向。

2 个答案:

答案 0 :(得分:1)

有一个discussion on decoupling ASP.NET Identity here。您可以在open source project SimpleSecurity中找到有关如何实施的示例。

答案 1 :(得分:1)

事实是,如果你要从IdentityUser继承,那么ASP.NET身份相关的程序集就会出现。您无法将Identity与ASP.NET分开。问题中的原始示例并不会给您带来太大的影响 - 在大多数情况下,如果您要在域项目中使用IdentityUser,则最好只继承IdentityUser

如果您的域项目确实需要没有ASP.NET相关程序集,那么您可以在Web项目中保留与Identity相关的类,并在您的Domain项目中创建一个单独的User模型,以编程方式链接两个按照建议here