【发布时间】:2013-11-12 12:21:51
【问题描述】:
我正在尝试将新的 asp.net 身份提供程序与我的模型域的抽象层一起使用,它有一个实体框架的实现,所以我想在我的实体框架中使用开箱即用的身份版本数据访问层。
如何转换
UserStore<IdentityUser>
到它的基本接口
IUserStore<IUser>
一旦 UserStore 是 IUserStore 的一个实现,我可以通过以下方式获得演员表:
UserStore<IdentityUser> as IUserStore<IdentityUser>
但我想避免 EntityFramework 引用和依赖中的 IdentityUser,以保持我的域层松散耦合。所以,IdentityUser 也是 IUser 的一个实现,我可以转换它:
IdentityUser as IUser
两种情况都有效,那么我想做一些这样的事情(实际上并不直接有效):
UserStore<IdentityUser> as IUserStore<IUser>
那么,我该如何实现呢?
如果我们看看这个diagramhttp://i3.asp.net/media/4459023/1.png,我们会看到我想要实现的目标。在我的域层中仅引用 Microsoft.AspNet.Identity.Core,但通过返回域层的核心接口在 DataAccess 层使用 Microsoft.AspNet.Identity.EntityFramework 实现。
【问题讨论】:
-
IUser 是基类吗?你通常只会在界面上放一个 I。
-
什么是 UserStore 和 IUserStore?试图谷歌,但它似乎不是一个标准的类?这是继承 List 还是什么?
-
抱歉,如果您愿意,可以将其称为基本接口。一旦 UserStore 是 IUserStore 的实现,我可以通过以下方式获得演员表:UserStore
as IUserStore ;但我想避免 EntityFramework 引用和依赖中的 IdentityUser,以保持我的域层松散耦合。那么,IdentityUser 也是 IUser 的一个实现,你明白了吗? -
我试图写一些东西,但我有太多的如果、但是和可能。在我看来,您似乎试图做的事情并不适合泛型。
-
你不能做这样的铸件或这样的事情是可能的:假设你有类
class Dog : IAnamal {}和class Cat : IAnamal {};并声明列表List<Dog> dogs = new List<Dog>();,如果我这样做IList<IAnamal> anamals = (IList<IAnamal>)dogs然后anamals.Add(new Cat())最后一个命令是完全合法的,因为anamals.Add接受任何IAnamal,因为dogs[0]现在包含Cat。
标签: asp.net asp.net-mvc entity-framework identity claims-based-identity