阿里云做网站预装环境,网站备案去哪找接入商,界面ui设计,网站建设与架构男友实验2.2.1 核心模块--依赖注入什么是依赖注入.NET Core DI 生命周期服务设计服务范围检查ASP.NET Core 依赖注入#xff1a;https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/dependency-injection?viewaspnetcore-5.0什么是依赖注入Dependency injection 依赖注入Inv… 2.2.1 核心模块--依赖注入什么是依赖注入.NET Core DI 生命周期服务设计服务范围检查ASP.NET Core 依赖注入https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/dependency-injection?viewaspnetcore-5.0什么是依赖注入Dependency injection 依赖注入Inversion of Control 控制反转依赖注入 与 依赖查找依赖注入通过编排告诉 IOC 容器整个内部类之间的依赖关系依赖查找通过回调或者上下文获取依赖asp .net core 如何实现在上一小节新建的 HelloApi 项目中修改 Program.csnamespace HelloApi
{public class Program{public static void Main(string[] args){var host CreateHostBuilder(args).Build();Console.WriteLine(Server started);// 依赖查找var helloService host.Services.GetRequiredServiceIHelloService();helloService.Hello();host.Run();}public static IHostBuilder CreateHostBuilder(string[] args) Host.CreateDefaultBuilder(args).ConfigureServices((ctx,services){// 依赖注入// 任何时候获取到的都是一个新的实例services.AddTransientIHelloService, HelloService();}).ConfigureWebHostDefaults(webBuilder {webBuilder.UseStartupStartup();});}
}
IHelloServicenamespace HelloApi.Services
{public interface IHelloService{void Hello();}
}
HelloServicenamespace HelloApi.Services
{public class HelloService : IHelloService{public void Hello(){Console.WriteLine(hello dotnet core);}}
}
.NET Core DI 生命周期// 依赖注入
// 任何时候获取到的都是一个新的实例
services.AddTransientIHelloService, HelloService();
// 每个 scope 都有一个实例
services.AddScopedIHelloService, HelloService();
// 单例整个应用程序的生命周期只有一个实例
services.AddSingletonIHelloService, HelloService();
通过 id 区分不同的服务生命周期HelloServiceprivate string _id;public HelloService()
{_id Guid.NewGuid().ToString();
}
Program.cs// 依赖查找
var helloService1 host.Services.GetRequiredServiceIHelloService();
helloService1.Hello();var helloService2 host.Services.GetRequiredServiceIHelloService();
helloService2.Hello();
启动程序输出如下Server started
hello dotnet core: cc77ee85-3806-4c29-b693-8da8bcf40498
hello dotnet core: 3306bebc-2340-4645-82e7-0e15fac0e9c7
AddSingletonProgram.cs.ConfigureServices((ctx,services)
{// 依赖注入// 单例整个应用程序的生命周期只有一个实例services.AddSingletonIHelloService, HelloService();
})
启动程序输出如下Server started
hello dotnet core: 35aa7646-e2bd-4d44-8f15-cd6aca3b0215
hello dotnet core: 35aa7646-e2bd-4d44-8f15-cd6aca3b0215
AddScoped需要自定义一个 scopeProgram.csusing (var scope host.Services.CreateScope())
{// 依赖查找var helloService1 scope.ServiceProvider.GetRequiredServiceIHelloService();helloService1.Hello();var helloService2 scope.ServiceProvider.GetRequiredServiceIHelloService();helloService2.Hello();
}
.ConfigureServices((ctx,services)
{// 依赖注入// 每个 scope 都有一个实例services.AddScopedIHelloService, HelloService();
})
启动程序输出如下Server started
hello dotnet core: abf083e2-7914-43b9-8e7f-540381a05b37
hello dotnet core: abf083e2-7914-43b9-8e7f-540381a05b37
服务设计不要使用静态类和静态成员不要使用全局状态而改为使用全局单例类不要在内部自己实例化对象每一个服务应该尽可能地小、易创建、易测试服务范围检查singleton 的服务不能依赖于 scoped 的服务GitHub源码链接https://github.com/MINGSON666/Personal-Learning-Library/tree/main/ArchitectTrainingCamp/HelloApi课程链接.NET云原生架构师训练营讲什么怎么讲讲多久欢迎各位读者加入微信群一起学习交流在公众号后台回复“加群”即可~~