Microsoft.Extensions.DependencyInjection依赖注入
作者:互联网
为什么要使用依赖注入
轻松管理类之间的依赖,构建应用时遵循设计原则。确保代码的可维护性和可扩展性。
依赖注入提供了对象创建和生命周期管理的核心能力
具体运用的组件:
接口实现分离模式,抽象包只需要声明,具体包包括具体的实现。意味着我们的组件只需要依赖它的抽象接口,不需要依赖实现。当使用时注入它的具体实现即可。
好处:以后可以任务修改具体实现的内容,不需要更改代码里面的引用逻辑代码。
依赖注入的核心类型
IserviceCollection:负责服务的注册
ServiceDescriptor:每个服务注册时的信息
IserviceProvider:具体的容器,也是由servicecollection build出来的
IserviceScope:表示一个容器的子容器的生命周期
######生命周期
#######单例singleton:整个生命周期都是一致的
#######作用域 scoped:容器的生存周期内是一致的,二次请求会更新
#######瞬间 Transient:每次从容器获取对象时都是一个全新的对象
测试声明周期 附代码
先创建不同的生命周期的三个接口和三个类
namespace HostWebDetail
{
//声明三个接口 测试生命周期 分别为单例,作用域,瞬间
public interface IMySingletonService
{
}
public interface IMyScopedService
{
}
public interface IMyTransientService
{
}
//声明方法 继承接口
public class MySingletonService: IMySingletonService
{
}
public class MyScopedService: IMyScopedService
{
}
public class MyTransientService: IMyTransientService
{
}
}
然后在startup中依赖注入
public void ConfigureServices(IServiceCollection services)
{
#region 注册服务不同生命周期的服务
services.AddSingleton<IMySingletonService, MySingletonService>();
services.AddScoped<IMyScopedService, MyScopedService>();
services.AddTransient<IMyTransientService, MyTransientService>();
#endregion
}
然后在控制器中实现
[Route("ServiceLifetime")]
[HttpGet]
//FromServices从容器里获取我们的对象
//每个对象输出两次 对比它的变化
public List<string> GetServiceLifetime(
[FromServices] IMySingletonService singleton1,
[FromServices] IMySingletonService singleton2,
[FromServices] IMyScopedService scoped1,
[FromServices] IMyScopedService scoped2,
[FromServices] IMyTransientService transient1,
[FromServices] IMyTransientService transient2)
{
var s = new List<string>();
s.Add($"singleton1:{singleton1.GetHashCode()}");
s.Add($"singleton2:{singleton2.GetHashCode()}");
s.Add($"scoped1:{scoped1.GetHashCode()}");
s.Add($"scoped2:{scoped2.GetHashCode()}");
s.Add($"transient1:{transient1.GetHashCode()}");
s.Add($"transient2:{transient2.GetHashCode()}");
return s;
}
执行效果
标签:生命周期,public,Add,依赖,Extensions,GetHashCode,DependencyInjection,FromServices,Micro 来源: https://www.cnblogs.com/yunnn/p/15960022.html