解耦Microsoft.AspNet.Identity.*

zam*_*6ak 10 asp.net-mvc entity-framework owin asp.net-mvc-5 asp.net-identity

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

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

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

Ola*_*ybø 5

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

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

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

  • 用户登录商店
  • IRoleStore
  • 用户秘密库
  • ITokenStore
  • 用户索赔存储
  • 用户管理商店
  • 用户存储库

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

IIdentityStore 的自定义实现需要能够在 POCO 类与 ASP.Net Identity 接口(例如 IUser、IUserSecret 等)之间进行转换。

在我看来,如果您无论如何都在商店中使用 EF,那么工作量很大却收效甚微。

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

  • 接受这种依赖(实现接口)肯定会简化事情,但我认为它对我们不起作用。如果您的域 DLL 包含您的模型,并且控制台应用程序也使用它,那么携带 ASP.NET 依赖项就没有意义。此外,一旦你开始走这条路(选择对核心域模型的依赖)......几年后,你最终会陷入一场噩梦:) (2认同)

Hao*_*ung 1

是的,这是一个完全支持的场景,基本上您将希望使用具有默认 EF 实现的 Microsoft.AspNet.Identity.EntityFramework dll 来使用排除,但您应该能够重用 Manager 类,并且只需使用以下命令实现您自己的自定义 Store您自己的 POCO,经理将通过界面很好地使用它。对于 RTM 来说,它已经被精简和简化了一些,我相信 RC 版本还没有那么精简。

已更新您可以在此处提前访问 RTM 位: MyGet