翼度科技»论坛 编程开发 .net 查看内容

.NET Core 依赖注入

5

主题

5

帖子

15

积分

新手上路

Rank: 1

积分
15
在.NET Core中,依赖注入(Dependency Injection,简称DI)是框架的一个重要特性,可以帮助我们解耦代码、管理对象生命周期以及提高可测试性等.一下是.NET Core中依赖注入的一些基本概念和用法:
  1、服务(Service):在DI中,服务即一个对象或者类型。用于完成特定的功能.例如,数据库访问、日志记录等都可以看作一个服务
  2、容器(Container):DI容器用于管理服务的注册和解析.在NET Core中。框架提供了一个内置的DI容器,可以扩展方法services.AddXXX()来注册服务。
  3、生命周期(Lifetime):在DI中,生命周期用于控制服务示例的创建和销毁.例如,一个服务可以是Singleton单例的,即全局仅创建一个实例;也可以是Scoped作用域的,即在同一请求范围内创建一个实例;还可以是Trasient瞬态的,即每次请求都创建一个新的实例
  4、依赖注入(Dependency Injection):依赖注入是指将一个对象所依赖的其他对象通过构造函数、属性或方法等方式,由容器自动注入给对象.在.NET Core中,主要使用构造函数注入的方式。
下面是一个.NET Core中使用依赖注入的示例:
  public interface IMyService
  {
    void DoSomething();
  }
  public class MyService:IMyService
  {
    public void DoSomething()
    {
      Console.WriteLine("Do something...");
    } 
  }
  public class MyClass
  {
    private readonly IMyService _myService;
    public MyClass(IMyService myService)
    {
      _myService=myService;
    }
    public void eat()
    {
      _myService.DoSomething)'
    }
  }
//如果是.NET Core:在Startup的ConfigureServices方法中注册服务和依赖注入
  service.AddTransient();
//如果是.NET6:在Program中注册服务和依赖注入
  builder.Services.AddTransient();
//在需要使用服务的类中。通过构造函数注入方式获取服务
public class MyController:Controller
{
  private readonly IMyService _myService;
  public MyController(IMyService myService)
  {
    _myService=myService;
  }
  public IActionResult Index()
  {
    _myService.DoSomething();
    return View();
  }
}
在以上示例中,IMyService是一个服务接口,MyService的类。在Startup的ConfigureServices方法中(在program中),将服务注册到容器中;在MyClass的构造函数中,使用构造函数注入的方式获取服务;在MyController中,同样使用构造函数注入的方式获取服务。
扩展:
  以ASP.NET Core为例,Microsoft.Extensions.DependencyInjection(官方提供的DI容器)中默认的生命周期为Scoped。这意味着在同一次请求中,每次注入相同的服务都会返回同一实例。而在不同的请求中,会创建新的实例。
  具体的生命周期应该根据应用程序的需求和实际情况进行选择。在依赖注入数据库的场景中,通常使用Singleton或者Scoped生命周期,以保证数据库连接的单例或在同意请求范围内的重用性。同时,需要注意在使用Singleton生命周期时,应该实现线程含权,避免因多线程环境下的并发访问而导致的问题。
随堂笔记,侵权请联系作者删除!

来源:https://www.cnblogs.com/wypd/archive/2023/04/24/17348588.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具