解耦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.Core
, Contoso.Data
和Contoso.Service
有依赖关系。 我会使用这个Contoso.Web.Framework
图层来configuration我的dependency injection。
Contoso.Web:
最后一层,即MVC 5.0应用程序,将对Contoso.Service
和Contoso.Core
图层上的Contoso.Web.Framework
和具有依赖关系。
控制器将调用位于Contoso.Service
层中定义的类内部的方法(例如,Login()方法)。
例如,Login()方法可能会也可能不会,例如,返回一个User类(null或填充),因为它返回一个User类和BECAUSE我们在一个Controller内,我们的Contoso.Web
层需要依赖Contoso.Service
和Contoso.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身份,也没有尝试去解耦,我不知道如何诚实地回答你的问题。 我猜你必须尝试移动。
如果并且当你这样做的时候,随时告诉我们是怎么回事,你遇到了什么事情/问题。
同时,我希望这可以帮助你解决一些问题。
文斯
- 什么是在lambda自动元组解压缩好的python3等价物?
- 在Mac OS X Mountain Lion和Mavericks上是否有任何替代valgrind的方法来检测C / C ++应用程序的内存泄漏?
- 如何从Asp.net Mvc-3发送电子邮件?
- configuration节'system.web.extensions'不能被读取,因为它缺less一个节声明
- System.Diagnostics.Process.Start不能从IIS工作
- 无法更新EntitySet – 因为它有一个DefiningQuery并且不存在<UpdateFunction>元素
- 用jQuery调用ASP.NET PageMethod / WebMethod – 返回整个页面
- 使用EF数据库的ASP.NET身份第一MVC5
- 无法启动Web服务器
- Console.WriteLine在ASP.NET中去了哪里?
- 在Visual Studio 2013中更改项目端口号