在 .NET Core 开发中,三层架构是一种常见的设计模式。该模式将应用程序分为三个层次结构:表示层、业务逻辑层和数据访问层。每个层次结构都有自己的职责,并与其他层次结构松耦合。这种设计有利于代码的可维护性、可测试性和可扩展性。而依赖注入(Dependency Injection)则是 .NET Core 中使用三层架构时的重要技巧之一。下面,将根据实际生产中的应用经验,分享一些关于 .NET Core 三层架构依赖注入的心得技巧。
在三层架构中,表示层负责与用户交互,业务逻辑层负责处理用户请求,数据访问层负责处理数据的持久化操作。而依赖注入则是通过构造函数、属性或方法,将对象之间的依赖关系注入到类中。DI 使对象更松耦合、可维护性更高。
在三层架构中,表示层负责与用户交互,业务逻辑层负责处理用户请求,数据访问层负责处理数据的持久化操作。而依赖注入则是通过构造函数、属性或方法,将对象之间的依赖关系注入到类中。DI 使对象更松耦合、可维护性更高。
- 安装引用包。 点击依赖项右键,点击管理NuGet包下载以下图片的管理包,版本可以自己选(不要太高,也不要太低):
建立三个类库,在名为XXX.DataDepository的类库设为默认启动项目,最后点击工具,找到NuGet管理包中程序管理包控制台并点击,最后输入:
Scaffold-DbContext "Data Source=.;Initial Catalog=ALlibrary;User ID=sa;Password=123456" Microsoft.EntityFrameworkCore.SqlServe
(里面的数据库和数据库登录名要自己修改)
最后生成数据r
- 使用依赖注入容器
在 .NET Core中,我们可以使用 DI 容器来管理依赖项。DI 容器是一个管理依赖关系的对象。当我们需要一个对象时,容器会根据配置自动创建并返回该对象。.NET Core 提供了自带的 DI 容器,可以满足我们的大部分需求。比如在代码中构造函数注入:
public class MyService : IMyService
{
private readonly IDatabaseAccess _databaseAccess;
public MyService(IDatabaseAccess databaseAccess)
{
_databaseAccess = databaseAccess;
}
}
在此代码中,MyService 类需要一个 IDatabaseAccess 接口的实例,DI 容器会自动创建并注入这个依赖项。
- 实现业务逻辑层和数据访问层
在三层架构中,业务逻辑层负责处理用户请求,而数据访问层负责将用户请求持久化到数据库。业务逻辑层和数据访问层是依赖的,但是在代码中我们要做到它们之间的代码解耦。我们需要在业务逻辑层中定义接口,然后在数据访问层中实现这些接口。
public interface IDatabaseAccess
{
void Save(MyModel model);
}
public class DatabaseAccess : IDatabaseAccess
{
public void Save(MyModel model)
{
// 数据库访问逻辑
}
}
在数据访问层中实现 IDatabaseAccess 接口,由依赖注入容器将依赖项注入到业务逻辑层中使用。
- 避免跨层操作
在三层架构中,各个层次结构应该具有单一职责,每层次结构专注于其特定的任务。业务逻辑层和数据访问层之间的操作不应该跨层次结构。违反了这些规则会使代码更难维护,增加运行时错误的风险。
- 使用构造函数注入
在三层架构中,最常用的注入方式是构造函数注入。通过将依赖项定义为构造函数的参数来实现:
public class MyService : IMyService
{
private readonly IDatabaseAccess _databaseAccess;
public MyService(IDatabaseAccess databaseAccess)
{
_databaseAccess = databaseAccess;
}
}
- 以接口为基础编程
依赖注入使用接口而不是具体实现。这使得我们可以更轻松地更改应用程序的
- 最后启动项目,https://localhost:44383/My/GetList查看数据
在 .NET Core 开发中,三层架构是一种常见的设计模式。该模式将应用程序分为三个层次结构:表示层、业务逻辑层和数据访问层。每个层次结构都有自己的职责,并与其他层次结构松耦合。这种设计有利于代码的可维护性、可测试性和可扩展性。而依赖注入(Dependency Injection)则是 .NET Core 中使用三层架构时的重要技巧之一。下面,将根据实际生产中的应用经验,分享一些关于 .NET Core 三层架构依赖注入的心得技巧。
在三层架构中,表示层负责与用户交互,业务逻辑层负责处理用户请求,数据访问层负责处理数据的持久化操作。而依赖注入则是通过构造函数、属性或方法,将对象之间的依赖关系注入到类中。DI 使对象更松耦合、可维护性更高。
在三层架构中,表示层负责与用户交互,业务逻辑层负责处理用户请求,数据访问层负责处理数据的持久化操作。而依赖注入则是通过构造函数、属性或方法,将对象之间的依赖关系注入到类中。DI 使对象更松耦合、可维护性更高。
- 安装引用包。 点击依赖项右键,点击管理NuGet包下载以下图片的管理包,版本可以自己选(不要太高,也不要太低):
建立三个类库,在名为XXX.DataDepository的类库设为默认启动项目,最后点击工具,找到NuGet管理包中程序管理包控制台并点击,最后输入:
Scaffold-DbContext "Data Source=.;Initial Catalog=ALlibrary;User ID=sa;Password=123456" Microsoft.EntityFrameworkCore.SqlServe
(里面的数据库和数据库登录名要自己修改)
最后生成数据r
- 使用依赖注入容器
在 .NET Core中,我们可以使用 DI 容器来管理依赖项。DI 容器是一个管理依赖关系的对象。当我们需要一个对象时,容器会根据配置自动创建并返回该对象。.NET Core 提供了自带的 DI 容器,可以满足我们的大部分需求。比如在代码中构造函数注入:
public class MyService : IMyService
{
private readonly IDatabaseAccess _databaseAccess;
public MyService(IDatabaseAccess databaseAccess)
{
_databaseAccess = databaseAccess;
}
}
在此代码中,MyService 类需要一个 IDatabaseAccess 接口的实例,DI 容器会自动创建并注入这个依赖项。
- 实现业务逻辑层和数据访问层
在三层架构中,业务逻辑层负责处理用户请求,而数据访问层负责将用户请求持久化到数据库。业务逻辑层和数据访问层是依赖的,但是在代码中我们要做到它们之间的代码解耦。我们需要在业务逻辑层中定义接口,然后在数据访问层中实现这些接口。
public interface IDatabaseAccess
{
void Save(MyModel model);
}
public class DatabaseAccess : IDatabaseAccess
{
public void Save(MyModel model)
{
// 数据库访问逻辑
}
}
在数据访问层中实现 IDatabaseAccess 接口,由依赖注入容器将依赖项注入到业务逻辑层中使用。
- 避免跨层操作
在三层架构中,各个层次结构应该具有单一职责,每层次结构专注于其特定的任务。业务逻辑层和数据访问层之间的操作不应该跨层次结构。违反了这些规则会使代码更难维护,增加运行时错误的风险。
- 使用构造函数注入
在三层架构中,最常用的注入方式是构造函数注入。通过将依赖项定义为构造函数的参数来实现:
public class MyService : IMyService
{
private readonly IDatabaseAccess _databaseAccess;
public MyService(IDatabaseAccess databaseAccess)
{
_databaseAccess = databaseAccess;
}
}
- 以接口为基础编程
依赖注入使用接口而不是具体实现。这使得我们可以更轻松地更改应用程序的
- 最后启动项目,https://localhost:44383/My/GetList查看数据