在.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<IMyService,MyService>();
//如果是.NET6:在Program中注册服务和依赖注入
builder.Services.AddTransient<IMyService,MyService>();
//在需要使用服务的类中。通过构造函数注入方式获取服务
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生命周期时,应该实现线程含权,避免因多线程环境下的并发访问而导致的问题。
随堂笔记,侵权请联系作者删除!