我是 ASP.NET MVC 的新手,我一直在开发具有个人用户身份验证的 MVC 5 应用程序。我在做我的应用程序时一直在做一个分层模式,比如分离模型层、DAL 层、Repos 等。但现在在 MVC 5 中,我希望能够使用他们称之为身份的用户和角色管理和身份验证,然后仍然具有我的应用程序的分层结构,因为现在看来 Identity 几乎与 MVC 项目本身以及其中的用户和角色模型以及上下文耦合在一起。
我现在在我的应用程序中所做的是我在 MVC 项目(在单独的文件夹中!)中拥有我所有的假设是独立的层,如我的 DAL、UnitOfWork、Repos、其他模型等,只是为了让它工作,对于现在。我知道这不是正确的做法。
那么任何人都可以向我指出一些关于此的很好的例子或文章,或者如果可能与否以及如何直接解释它?谷歌在这个问题上对我并不友好。谢谢!
最佳答案
这是我尝试的快速草稿......我会创建这些层:
Contoso.Core:
该层包含代表我的数据库表的所有实体/类。
例如,我会有一个:
有些人称这些实体/类为:领域对象,其他人称之为 POCO 类。
或者,这些实体/类在核心层中定义,因为它们可能(或可能不)在其他层中使用。
Contoso.Data:
这一层是我定义我的
ContosoDbContext.cs
的地方类(class)。我所有的 DbSet<>
都在该文件中定义。例如,我的
ContosoDbContext.cs
中会有以下内容:不用说,Contoso.Data 层将依赖于
Contoso.Core
层。另外,里面还有
Contoso.Data
层,我将拥有我的通用存储库以及与“数据访问”相关的任何内容。Contoso.Service:
这一层将是我放置所有业务规则的地方。例如,我可能有一个
UserService.cs
可以有 Login()
的类方法。 Login() 方法将接收用户名/密码并调用存储库来查找用户。因为Service层需要Repository,所以我会依赖
Contoso.Data
层并且因为我将使用 User 类(它恰好位于 Contoso.Core
层内),我还将依赖于 Contoso.Core
层。Contoso.Web.Framework:
该层将依赖于
Contoso.Core
, Contoso.Data
和 Contoso.Service
.我会用这个
Contoso.Web.Framework
层来配置我的依赖注入(inject)。Contoso.Web:
最后一层,MVC 5.0 应用程序,将依赖于
Contoso.Web.Framework
并且在 Contoso.Service
并且在 Contoso.Core
层。Controller 将调用位于
Contoso.Service
中定义的类中的方法。层(例如 Login() 方法)。Login() 方法可能会也可能不会,例如,返回一个 User 类(空或填充)并且因为它返回一个 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
的接口(interface).这意味着我的
Contoso.Data
层将依赖于 Microsoft.AspNet.Identity.EntityFramework
最有可能的是 Microsoft.AspNet.Identity.Core
还有……正如您所说,当您创建一个新的 MVC 5.0 项目时,所有这些都存在并在单个应用程序中定义。没有任何东西被或已经被解耦到层中。所以在上述架构中
ContosoDbcontext.cs
类(class)住在Contoso.Data
层而不是直接在 ASP.NET MVC 应用程序内部。由于我没有尝试过新的 ASP.NET Identity,也没有尝试解耦,我不知道如何诚实地回答你的问题。我想你必须尝试移动一些东西。
如果您这样做了,请随时告诉我们进展如何以及您遇到了什么事情/问题。
同时,我希望这能帮助你阐明(或不明白)。
文斯
关于c# - 解耦 ASP.NET MVC 5 Identity 以允许实现分层应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20375432/