繁体   English   中英

如何投射UserStore <IdentityUser> 到其基类IUserStore <IUser> ?

[英]How to cast UserStore<IdentityUser> to its base class IUserStore<IUser>?

我正在尝试将新的asp.net身份提供程序与我的模型域的抽象层一起使用,其中有一个Entity Framework的实现,因此我想在我的数据访问层中使用带有实体框架的现成版本的身份。

如何转换

UserStore<IdentityUser> 

到其基本界面

IUserStore<IUser>

一旦UserStore是IUserStore的实现,我就可以通过以下方式进行转换:

UserStore<IdentityUser> as IUserStore<IdentityUser>

但是我想避免从EntityFramework引用和依赖项中获取IdentityUser,以使我的域层保持松散耦合。 因此,IdentityUser也是IUser的实现,可以将其强制转换为:

IdentityUser as IUser

两种情况都有效,那么我想做些类似的事情(实际上并不直接起作用):

UserStore<IdentityUser> as IUserStore<IUser>

那么,我该如何实现呢?

如果我们看一下该 http://i3.asp.net/media/4459023/1.png ,我们将看到我想要实现的目标。 在我的域层中仅引用Microsoft.AspNet.Identity.Core,但通过返回域层的核心接口在DataAccess层使用Microsoft.AspNet.Identity.EntityFramework实现。

UserStore<UserIdentity>不起作用,因为UserStore<UserIdentity>UserStore<IUser> (即使IdentityUser实现IUser )。

如果您需要UserStore<IUser>那么我建议您以这种方式实现它并在内部UserStore<IUser>转换为具体类型,则可以确保具体类型为IdentityUser并带有约束,例如

public class UserStore<T> : IUserStore<T> where T: IUser
{
}

您还需要使您的接口协变,即

public interface IUserStore<out T> where T : IUser
{
}

这应该允许您执行以下操作(假设IdentityUser支持IUser

IUserStore<IUser> userStore = new UserStore<IdentityUser>();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM