C# .NET核心中的项目引用与以前的.NET版本不同?
目前正在使用C#和dotnet Core建立一个新的Web Api。在引用其他项目时,我注意到一些奇怪的行为 我的解决方案非常简单:DataAccess、BusinessLogic、WebApi WebApi项目引用BusinessLogic项目,BusinessLogic项目引用DataAccess项目 现在使用.NET的早期版本,我的WebApi项目将无法访问DataAccess项目中的任何内容,但在我当前的设置中,我可以访问我的WebApi项目中DataAccess项目中的任何内容,而无需对其进行引用C# .NET核心中的项目引用与以前的.NET版本不同?,c#,visual-studio,architecture,.net-core,C#,Visual Studio,Architecture,.net Core,目前正在使用C#和dotnet Core建立一个新的Web Api。在引用其他项目时,我注意到一些奇怪的行为 我的解决方案非常简单:DataAccess、BusinessLogic、WebApi WebApi项目引用BusinessLogic项目,BusinessLogic项目引用DataAccess项目 现在使用.NET的早期版本,我的WebApi项目将无法访问DataAccess项目中的任何内容,但在我当前的设置中,我可以访问我的WebApi项目中DataAccess项目中的任何内容,而无需
请任何人解释一下这种行为,以及可能如何防止这种行为?这就是您仅通过引用Microsoft.AspNetCore.all就可以获得所有AspNetCore软件包的方法 微软文档详细提到了这一点 另外,请注意,由于应用程序的合成根是WebAPI,因此您希望它能够看到DataAccess中的类型,以便可以向容器注册它们 实现这一点的一种方法是在您的业务逻辑上同时具有持久性的抽象。并反转BusinessLogic和DataAccess的参考(高级模块不应依赖于低级模块) 比如: 业务逻辑:
- User.cs
- IUserRepository.cs
- UserRepository:IUserRepository
Register<IUserRepository, UserRepository>();
Register();
您可以进一步使用DataAccess。抽象仅用于接口,但这将取决于您的项目和您希望进行的程度。这就是您仅通过引用Microsoft.AspNetCore.all就可以获得所有AspNetCore包的方式 微软文档详细提到了这一点 另外,请注意,由于应用程序的合成根是WebAPI,因此您希望它能够看到DataAccess中的类型,以便可以向容器注册它们 实现这一点的一种方法是在您的业务逻辑上同时具有持久性的抽象。并反转BusinessLogic和DataAccess的参考(高级模块不应依赖于低级模块) 比如: 业务逻辑:
- User.cs
- IUserRepository.cs
- UserRepository:IUserRepository
Register<IUserRepository, UserRepository>();
Register();
您可以更进一步,拥有DataAccess。抽象仅用于接口,但这取决于您的项目和您想进行的程度。找到了一种方法来防止此线程中出现这种行为: 编辑项目文件时,
PrivateAssets
属性可以设置为All
,以防止这种行为
<ItemGroup>
<ProjectReference Include="..\DataAccess\1-DataAccess.csproj" PrivateAssets="All" />
</ItemGroup>
找到了一种防止此线程中出现这种行为的方法: 编辑项目文件时,
PrivateAssets
属性可以设置为All
,以防止这种行为
<ItemGroup>
<ProjectReference Include="..\DataAccess\1-DataAccess.csproj" PrivateAssets="All" />
</ItemGroup>
我认为在业务逻辑中拥有存储库和实体或DAL相关接口是次优的。虽然IoC很好,但我宁愿有适当的层分离。在BLL和DAL中始终可以创建单独的IoC容器。也许我是以一种老式的方式思考的,我认为在业务逻辑中拥有存储库、实体或DAL相关接口是次优的。虽然IoC很好,但我宁愿有适当的层分离。在BLL和DAL中始终可以创建单独的IoC容器。也许我是在用一种老式的方式思考。