【问题标题】:Decoupling Microsoft.AspNet.Identity.*解耦 Microsoft.AspNet.Identity.*
【发布时间】:2013-09-14 15:48:45
【问题描述】:

我正在使用 Visual Studio 2013 RC 并正在使用新的 Microsoft.AspNet.Identity.* 包测试表单身份验证。

我想整合这些概念(用户、角色等),但想使用我自己的域模型 (POCO),它们位于不同的程序集中。我也不想创建对Microsoft.AspNet.Identity.* dll 的依赖。

这可能吗? 我发现this article 说不是,但是这篇文章是基于预览而不是身份包的 RC 版本编写的。

【问题讨论】:

    标签: asp.net-mvc entity-framework asp.net-mvc-5 owin asp.net-identity


    【解决方案1】:

    我已经更新了我的示例项目,您可以在这里找到:Identity RC1 sample

    它现在实现了一个实体框架模型,它仍然需要对 Microsoft.AspNet.Identity.EntityFramework 的引用,因为我也不想重新实现所有 Store 类。但该示例展示了如何为模型使用自己的 POCO 类。

    如果您想从模型程序集中完全删除对 Microsoft.AspNet.Identity.EntityFramework 的依赖,您需要实现一个实现 IIdentityStore 接口的类,该接口具有以下接口的属性:

    • IUserLoginStore
    • IRoleStore
    • IUserSecretStore
    • ITokenStore
    • IUserClaimStore
    • IUserManagementStore
    • IUserStore

    IIdentityStore 类应位于与模型程序集不同的程序集中,并引用您的模型程序集。 IIdentityStore 程序集将依赖于 ASP.Net Identity 核心。

    您的 IIdentityStore 自定义实现需要能够在您的 POCO 类之间转换为 ASP.Net 身份接口,例如 IUser、IUserSecret 等。

    在我看来,如果您在商店中使用 EF,那么做很多工作却收效甚微。

    依赖于 AspNet.Identity.Core 程序集并让你的一些 POCO 类分别实现一个小接口,这对我来说似乎要简单得多。

    【讨论】:

    • 嗯,即使那些是Microsoft.AspNet.Identity 核心包的一部分——不是吗?
    • 你说得对,我已经更新了我的答案。我的示例项目中的 POCO 还实现了 IUser、IUserSecret 接口,这些接口也在 Microsoft.AspNet.Identity.Core 程序集中。
    • 承担这种依赖(实现接口)肯定会简化事情,但我认为它对我们不起作用。如果您有包含模型的域 DLL,以及使用它的控制台应用程序,那么携带 ASP.NET 依赖项是没有意义的。此外,一旦你开始走这条路(获得对核心域模型的依赖)......几年后,你最终会做噩梦:)
    【解决方案2】:

    是的,这是一个完全受支持的方案,基本上您将希望使用具有默认 EF 实现的 Microsoft.AspNet.Identity.EntityFramework dll 来使用 exclude,但您应该能够重用 Manager 类并只实现您自己的使用您自己的 POCO 的自定义商店,经理将通过界面很好地使用这些 POCO。对于 RTM 来说,它被精简了一些,我相信 RC 版本还没有那么精简。

    已更新您可以在这里抢先体验 RTM 位:MyGet

    【讨论】:

    • 是否会有一个示例说明如何为 RTM 完成此任务(使用自定义商店)?我希望能够利用 OWIN 安全性,并且能够使用我自己的域 POCO“告诉”它在哪里可以找到用户、配置文件、角色等……
    • 是的,会有几个 RTM 示例来证明这一点,Azure 表存储存储、MySql 存储、使用现有数据库的存储(这可能与您的方案最相似)
    • 我期待这些示例(尤其是现有的数据库/模型),并希望情况与@Olav Nybø 答案和 cmets 中描述的情况不同...
    • 添加一个链接,您可以在其中预览 RTM 位到我的答案
    • @HaoKung 你有你提到的允许使用 Asp.NET Identity 实现不同存储的示例的链接吗?
    【解决方案3】:

    以防万一。也许我可以帮助某人。 exorcising entity framework from asp.net.Identity

    我创建了单独的项目(类库),然后将 ref 添加到 asp.identity.core, 然后我在那里实现了我的 UserStore 类,并在 Web 项目中提供了我的身份配置。

    它在具有复杂 n 层架构的项目中运行良好。

    【讨论】:

    猜你喜欢
    • 2013-04-04
    • 1970-01-01
    • 2015-08-25
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多