Asp.net mvc 解耦Microsoft.AspNet.Identity*

Asp.net mvc 解耦Microsoft.AspNet.Identity*,asp.net-mvc,entity-framework,asp.net-mvc-5,owin,asp.net-identity,Asp.net Mvc,Entity Framework,Asp.net Mvc 5,Owin,Asp.net Identity,我在Visual Studio 2013 RC工作,正在使用新的Microsoft.AspNet.Identity.*软件包测试表单身份验证 我希望集成这些概念(用户、角色等),但希望使用我自己的域模型(POCO),它们位于不同的程序集中。我也不想创建对Microsoft.AspNet.Identity.*dll的依赖关系 这可能吗? 我发现上面说的不是,但这篇文章是基于identity包的预览版而不是RC版编写的 是的,这是一个完全受支持的方案,基本上您将希望使用Microsoft.AspNe

我在Visual Studio 2013 RC工作,正在使用新的
Microsoft.AspNet.Identity.*
软件包测试表单身份验证

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

这可能吗?
我发现上面说的不是,但这篇文章是基于identity包的预览版而不是RC版编写的

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


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

我已经更新了我的示例项目,您可以在此处找到:

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

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

  • IUserLoginStore
  • 易洛莱商店
  • IUserSecretStore
  • 伊藤健商店
  • IUserClaimStore
  • IUserManagementStore
  • IUserStore
IIdentityStore类应位于与模型程序集分离的程序集中,并引用模型程序集。IIdentityStore程序集将依赖于ASP.Net标识核心

IIdentityStore的自定义实现需要能够将POCO类转换为ASP.Net标识接口(如IUser、IUserSecret等)

在我看来,如果你在你的商店里使用EF的话,似乎是一件事半功倍的事


依赖AspNet.Identity.Core程序集,让您的一些POCO类每个实现一个小接口,对我来说似乎简单多了。

以防万一。也许我可以帮助别人。

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


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

是否有一个例子说明如何为RTM实现这一点(使用自定义存储)?我希望能够利用OWIN安全性,并且能够使用我自己的域POCO“告诉”it在何处查找用户、配置文件、角色等……是的,将有几个RTM示例演示这一点,Azure表存储存储、MySql存储、使用现有数据库的存储(这可能与您的场景最为相似)我期待这些示例(尤其是现有的db/模型)希望情况会不同于@Olav Nybøanswer and comments中描述的情况……添加一个链接,您可以在其中预览我的answer@HaoKung您是否有一个链接,可以使用Asp.NET标识实现不同的存储?嗯,甚至那些都是
Microsoft.AspNet.Identity
core p的一部分ackage-不是吗?你是对的,我已经更新了我的答案。我的示例项目中的POCO还实现了IUser、IUserSecret接口,这些接口也在Microsoft.AspNet.Identity.Core程序集中。采用此依赖关系(实现接口)确实简化了事情,但我认为这对我们不起作用。如果你有一个包含模型的域DLL,以及一个使用它的控制台应用程序,那么携带ASP.NET依赖项是没有意义的。此外,一旦你开始走这条路(获取对核心域模型的依赖项)……几年后,你就会陷入噩梦:)非常感谢。另一篇有用的文章是