繁体   English   中英

解耦ASP.NET MVC 5 Identity以允许实现分层应用程序

[英]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(类库)
  • Contoso.Data(类库)
  • Contoso.Service(类库)
  • Contoso.Web.Framework(类库)
  • Contoso.Web(ASP.NET MVC 5.0)

Contoso.Core:

该层包含表示我的数据库TABLES的所有实体/类。

所以,例如,我会有一个:

  • User.cs类。
  • Product.cs类
  • ProductDetail.cs类
  • 等等..

有些人称这些实体/类:域对象,其他人称之为POCO类。

或者,这些实体/类在核心层中定义,因为它们可以(或可以不)在其他层中使用。


Contoso.Data:

这一层是我定义ContosoDbContext.cs类的地方。 它位于该文件中,我已经定义了所有DbSet<> 例如,我将在ContosoDbContext.cs包含以下内容:

  • public DbSet User {get; 组; }
  • public DbSet Product {get; 组; }
  • public DbSet ProductDetail {get; 组; }

不用说,在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.CoreContoso.DataContoso.Service 我将使用此Contoso.Web.Framework层来配置我的依赖注入。


Contoso.Web:

最后一层(MVC 5.0应用程序)将依赖Contoso.Web.FrameworkContoso.Service以及Contoso.Core层。

控制器将调用生活在Contoso.Service层中定义的类内的方法(例如Login()方法)。

Login()方法可能会也可能不会,例如,返回User类(null或填充),因为它返回User类,并且因为我们在Controller中,我们的Contoso.Web层需要依赖Contoso.ServiceContoso.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.

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