依赖注入DI

在 .NET Core 中,依赖注入(Dependency Injection, DI)是一种设计模式,用于实现松耦合的代码结构。它通过将对象的依赖关系从代码中分离出来,使代码更易于测试、维护和扩展。

依赖注入的核心思想

依赖注入的核心思想是“控制反转”(Inversion of Control, IoC)。传统的程序设计中,类直接创建其依赖的对象;而在依赖注入中,依赖由外部提供给类,而不是由类自己创建。

这种模式的主要优点包括:

  • 降低耦合度:类与其依赖之间的耦合度降低。
  • 提高可测试性:可以通过注入模拟对象(Mock Objects)来测试类的行为。
  • 增强灵活性:可以在运行时动态替换依赖。

依赖注入容器

.NET Core 提供了一个轻量级的依赖注入容器(IServiceProvider),用于管理依赖的注册和解析。

该容器支持三种主要的服务生命周期:

  • Transient(瞬态):每次请求都会创建一个新的实例。
  • Scoped(作用域):每个请求(如 HTTP 请求)只创建一个实例。
  • Singleton(单例):整个应用程序生命周期内只有一个实例。
services.AddTransient<IService, Service>();
services.AddScoped<IService, Service>();
services.AddSingleton<IService, Service>();

声明周期解释

1. Transient:每次请求都会创建一个新的实例。适合无状态的服务。

2. Scoped:在同一个请求范围内共享一个实例。适合有状态的服务,例如数据库上下文。

3. Singleton:在整个应用程序生命周期内共享一个实例。适合全局状态或配置服务。

依赖注入的基本步骤

1. 注册服务

在 Startup.cs 文件的 ConfigureServices 方法中,或者在 Program.cs 文件中(对于 .NET 6+),需要将依赖的服务注册到容器中。例如:

public void ConfigureServices(IServiceCollection services)
{
services.AddTransient<IMyService, MyService>();
}

2. 解析依赖

在需要使用依赖的地方(如控制器或服务类中),通过构造函数注入的方式获取依赖。例如:

public class MyController : Controller
{
private readonly IMyService _myService;
public MyController(IMyService myService)
{
_myService = myService;
}
public IActionResult Index()
{
var result = _myService.DoWork();
return View(result);
}
}

.NET Core 的框架会在运行时自动解析 IMyService 的实现,并将其注入到 MyController 中。

 

posted @   getRainbow  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示