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

我是新来的ASP.NET MVC,我一直在开发一个MVC 5应用程序与个人用户authentication。 我一直在做分层模式,当做我的应用程序,如分离模型层,DAL层,回购等,但现在在MVC 5,我想能够使用用户和angular色pipe理和身份validation,他们称之为身份,然后对我的应用程序仍然具有这种分层结构,因为现在看起来,Identity与MVC项目本身以及用户和angular色模型以及上下文都非常相关。

我现在在应用程序中所做的是在MVC项目(在单独的文件夹中)中,我拥有所有我想要的单独图层,例如我的DAL,UnitOfWork,Repos,其他模型等,以便使其工作,现在。 而且我知道这不是正确的做法。

那么,任何人都可以向我提供一些关于这个问题的好例子或文章,或者如果可能或者不可以直接解释它,怎么样? Google对此并不友善。 谢谢!

这里是我尝试的快速草稿…我会创build这些图层:

  • Contoso.Core(类库)
  • Contoso.Data(类库)
  • Contoso.Service(类库)
  • Contoso.Web.Framework(类库)
  • Contoso.Web(ASP.NET MVC 5.0)

Contoso.Core:

这个层拥有代表我的数据库表的所有实体/类。

举个例子,我会有一个:

  • 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图层将在Contoso.Core图层上有一个依赖关系。 另外,它是在Contoso.Data层的内部,我将拥有我的Generic Repository和任何与“数据访问”相关的东西。


Contoso.Service:

这层将是我放置所有业务规则的地方。 例如,我可能有一个UserService.cs类可以有一个Login()方法。 Login()方法将接收用户名/密码并调用Repository来查找用户。

由于服务层需要存储库,因此我将在Contoso.Data层上有一个依赖关系,因为我将玩User类(正好在Contoso.Core图层中),所以我也会有一个依赖在Contoso.Core图层上。


Contoso.Web.Framework:

此图层将对Contoso.CoreContoso.DataContoso.Service有依赖关系。 我会使用这个Contoso.Web.Framework图层来configuration我的dependency injection。


Contoso.Web:

最后一层,即MVC 5.0应用程序,将对Contoso.ServiceContoso.Core图层上的Contoso.Web.Framework和具有依赖关系。

控制器将调用位于Contoso.Service层中定义的类内部的方法(例如,Login()方法)。

例如,Login()方法可能会也可能不会,例如,返回一个User类(null或填充),因为它返回一个User类和BECAUSE我们在一个Controller内,我们的Contoso.Web层需要依赖Contoso.ServiceContoso.Core


当然,我还没有详细说明这里或每一层的所有内容,但是这只是给你一个我将使用的架构types的例子。

到目前为止,我还没有回答你的问题,但很less有我知道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以及…

正如你所说,当你创build一个新的MVC 5.0项目时,所有这些都存在,并在单个应用程序中定义。 没有任何东西或已经被分解成层。 所以在上面的体系结构中, ContosoDbcontext.cs类位于Contoso.Data层内,而不是直接位于ASP.NET MVC应用程序内部。

由于我没有尝试新的ASP.NET身份,也没有尝试去解耦,我不知道如何诚实地回答你的问题。 我猜你必须尝试移动。

如果并且当你这样做的时候,随时告诉我们是怎么回事,你遇到了什么事情/问题。

同时,我希望这可以帮助你解决一些问题。

文斯