[英]Decoupling ASP.NET MVC 5 Identity to allow implementing a layered application
我是ASP.NET MVC的新手,我一直在开发一个带有个人用户身份验证的MVC 5应用程序。 在做我的应用程序时,我一直在做分层模式,比如分离模型层,DAL层,Repos等等。但是现在在MVC 5中,我希望能够使用他们称之为Identity的用户和角色管理和身份验证,然后仍然有我的应用程序的分层结构,因为现在似乎Identity与MVC项目本身,其中的用户和角色模型以及上下文相结合。
我现在在我的应用程序中所做的是我在MVC项目(在单独的文件夹中)中拥有所有我应该要分离的层,如我的DAL,UnitOfWork,Repos,其他模型等,只是为了使它工作,现在。 我知道这不是正确的做法。
所以,任何人都可以向我指出一些关于这个的好例子或文章,或者直接解释它是否可能以及如何? Google对此并不友好。 谢谢!
这是我尝试的快速草稿......我会创建这些图层:
Contoso.Core:
该层包含表示我的数据库TABLES的所有实体/类。
所以,例如,我会有一个:
有些人称这些实体/类:域对象,其他人称之为POCO类。
或者,这些实体/类在核心层中定义,因为它们可以(或可以不)在其他层中使用。
Contoso.Data:
这一层是我定义ContosoDbContext.cs
类的地方。 它位于该文件中,我已经定义了所有DbSet<>
。 例如,我将在ContosoDbContext.cs
包含以下内容:
不用说,在Contoso.Data层将有上的一个DEPENDECY Contoso.Core
层。 另外,它在Contoso.Data
层内部,我将拥有我的Generic Repository以及与“data access”相关的任何内容。
Contoso.Service:
这一层将是我放置所有业务规则的地方。 例如,我可能有一个可以使用Login()
方法的UserService.cs
类。 Login()方法将接收用户名/密码并调用存储库以查找用户。
因为服务层需要存储库,所以我对Contoso.Data
层有依赖性,因为我将使用User类(碰巧住在Contoso.Core
层内),我也会有依赖性在Contoso.Core
图层上。
Contoso.Web.Framework:
该层将依赖于Contoso.Core
, Contoso.Data
和Contoso.Service
。 我将使用此Contoso.Web.Framework
层来配置我的依赖注入。
Contoso.Web:
最后一层(MVC 5.0应用程序)将依赖Contoso.Web.Framework
和Contoso.Service
以及Contoso.Core
层。
控制器将调用生活在Contoso.Service
层中定义的类内的方法(例如Login()方法)。
Login()方法可能会也可能不会,例如,返回User类(null或填充),因为它返回User类,并且因为我们在Controller中,我们的Contoso.Web
层需要依赖Contoso.Service
和Contoso.Core
。
当然,我没有详细说明这里或每一层的所有内容,但这只是为了给你一个我使用的架构类型的例子。
到目前为止,我还没有回答你的问题,但几乎没有我了解MVC 5.0和它的新身份的机制,我相信Contoso.Core
层将需要对依赖Microsoft.AspNet.Identity.EntityFramework
除了Microsoft.AspNet.Identity.Core
同样,我的ContosoDbContext.cs
类需要实现IdentityDbContext
接口,该接口恰好属于Microsoft.AspNet.Identity.EntityFramework.dll
。
这意味着我的Contoso.Data
层将依赖于Microsoft.AspNet.Identity.EntityFramework
并且很可能是Microsoft.AspNet.Identity.Core
...
正如您所说,当您创建一个新的MVC 5.0项目时,所有这些都存在并在单个应用程序中定义。 什么都没有或已经分层。 因此,在上面的体系结构中, ContosoDbcontext.cs
类位于Contoso.Data
层内,而不是直接位于ASP.NET MVC应用程序内。
由于我没有尝试过新的ASP.NET身份,也没有尝试解决问题,我不知道如何诚实地回答你的问题。 我想你必须尝试移动东西。
如果您这样做,请随时告诉我们它是如何进行的以及您遇到的问题/问题。
与此同时,我希望这能帮助你解决一些问题。
文斯
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.