Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用业务和数据模型层时如何使用Asp.net标识_C#_Asp.net Core_Asp.net Identity - Fatal编程技术网

C# 使用业务和数据模型层时如何使用Asp.net标识

C# 使用业务和数据模型层时如何使用Asp.net标识,c#,asp.net-core,asp.net-identity,C#,Asp.net Core,Asp.net Identity,我正在创建具有分层体系结构的应用程序。我有单独的 +仅包含模型类的“DataModel”项目 +包含我的业务的“BusinessLogic”项目 +用于从ui运行业务的“核心”项目 +“视图模型”项目 +具有asp.net核心应用程序的“Web”项目 我的目标是分离这些项目,这样Web项目对数据模型一无所知,所以Web项目应该只引用Core和ViewModel。在我配置Asp.NETIdentity之前,一切都很好——为了配置授权,我必须引用我想要避免的DataModel项目。是否有可能实现我的

我正在创建具有分层体系结构的应用程序。我有单独的 +仅包含模型类的“DataModel”项目 +包含我的业务的“BusinessLogic”项目 +用于从ui运行业务的“核心”项目 +“视图模型”项目 +具有asp.net核心应用程序的“Web”项目

我的目标是分离这些项目,这样Web项目对数据模型一无所知,所以Web项目应该只引用Core和ViewModel。在我配置Asp.NETIdentity之前,一切都很好——为了配置授权,我必须引用我想要避免的DataModel项目。是否有可能实现我的目标,如果有,如何实现

注:
我用这个来写我的问题,我没有找到被接受的答案作为我的答案

创建直接使用Identity的网站时,必须为其提供各种Identity存储:UserStore、RoleStore等。默认且最简单的方法是使用Entity Framework Core作为存储的支持,Identity附带内置存储以与EF Core配合使用。但是,使用它需要访问上下文,这意味着您需要依赖于您的数据层。当使用AddEntityFrameworkStores时,没有办法解决这个问题

如果希望保持数据层的抽象性,则需要1使用集中式标识提供程序,如IdentityServer,或2创建自定义存储

例如,IdentityServer支持同时使用EF和Identity作为支持。这意味着它需要依赖于您的数据层,但IdentityServer将存在于单独的项目中。您的实际网站将通过IdentityServer端点处理身份验证,因此不会依赖于您的数据层。事实上,它根本不知道或关心你在使用身份

显然,创建自定义存储会有点困难,除非提供真正的抽象层,否则最终还是会依赖于数据层。这可能类似于microservices,在microservices中,存储将实际向服务发出HTTP请求以获取它所需的对象,而不是直接进行数据库查询。然后,微服务将保存数据依赖关系


您可能没有考虑到的一点是,即使没有直接引用,依赖关系也存在。例如,如果您的核心项目使用数据模型项目中的内容,然后您的Web项目使用核心项目中的内容,那么您的Web项目对您的数据模型项目具有隐式依赖性。例如,如果您在构建后查看bin文件夹,您会看到一个用于DataModel项目的DLL,甚至还有一个用于efcore的DLL,尽管在Web项目中没有明确使用这两个DLL。在这种情况下,使用单独的项目可能只会帮助以更简洁易懂的方式划分逻辑,但它并不能真正抽象任何依赖项。

您能解释更多或提供一些代码吗?我在一个我称之为域层的层中定义了我的模型和业务逻辑,而域层对它的实现一无所知,对于用户实体,我使用接口,在基础设施层,我使用标识实现它。谢谢@Sasan。现在,我只是根据我的问题创建了5个空项目。但我知道,要在Web项目中使用标识,必须在Startup.cstanks中添加DbContext并使用services.AddIdentity。我同意你的看法,但你确定除了这两种方法之外没有其他方法吗?