当前位置: 首页 > wzjs >正文

做网站大流量高清视频线和音频线的接口类型

做网站大流量,高清视频线和音频线的接口类型,有什么平台可以推广信息,专业制作简历的软件前言: 在现代的软件开发中,依赖注入(Dependency Injection,简称DI)是一种重要的设计模式,它能够帮助我们更好地管理对象的依赖关系,提高代码的可维护性和可测试性。.NET框架提供了强大的依赖注入…

前言: 在现代的软件开发中,依赖注入(Dependency Injection,简称DI)是一种重要的设计模式,它能够帮助我们更好地管理对象的依赖关系,提高代码的可维护性和可测试性。.NET框架提供了强大的依赖注入容器,可以方便地在应用程序中进行服务的注册和解析。本文将讲解如何使用微软官方.NET 8依赖注入组件 Microsoft.Extensions.DependencyInjection,以及几种常见的注入方式及其适用场景。

一、安装Microsoft.Extensions.DependencyInjection

使用 NuGet包下载安装组件,需要注意与所选择的.net环境一致(我这里创建的是.net8)
在这里插入图片描述

二、几种常见的注入方式及其适用场景

1、创建依赖注入容器

首先,我们需要创建一个ServiceCollection对象,该对象就是我们的依赖注入容器,用于注册服务。

ServiceCollection services = new ServiceCollection();
2、注册服务

在.NET中,我们可以通过不同的生命周期来注册服务。主要有三种生命周期:单例(Singleton)瞬态(Transient)作用域(Scoped)。下面分别对这三种生命周期进行讲解。

2.1 单例(Singleton)

单例模式意味着在整个应用程序的生命周期内,服务只会被实例化一次。每次从依赖注入容器中解析该服务时,都会得到同一个对象实例。

services.AddSingleton<IProductRepository, ProductRepository>();

业务场景:

①配置文件读取器:因为配置文件的内容在应用程序运行期间通常是不变的,所以不需要每次都重新读取。
②缓存:缓存类通常也需要在应用程序的整个生命周期内保持单例,以便所有组件都能共享同一个缓存实例。

2.2 瞬态(Transient)

瞬态模式意味着每次从依赖注入容器中解析服务时,都会创建一个新的服务实例。

services.AddTransient<IProductRepository, ProductRepository>();

业务场景:

①日志记录器:在某些情况下,我们可能希望每个请求或操作都有独立的日志记录实例,以便单独记录每个请求或操作的日志。
②每次请求都需要独立状态的服务:例如,某些服务可能需要处理特定请求的状态,每次请求都需要一个新的实例来保持请求的独立性。

2.3 作用域(Scoped)

作用域模式意味着服务在每个请求或作用域内只会被实例化一次。如果同一个请求内解析多次,会得到同一个对象实例;如果不同请求内解析,会得到不同的对象实例。

services.AddScoped<IProductRepository, ProductRepository>();

业务场景:

①数据库上下文:在Web应用程序中,通常希望每个请求都有自己独立的数据库上下文实例,以确保线程安全。
②会话数据处理:在某些情况下,我们需要处理每个会话的数据,作用域模式可以确保会话数据在同一次请求内的一致性。

3、解析服务

注册完服务后,我们需要构建服务提供者(IServiceProvider)来解析服务。服务提供者会根据我们注册的生命周期来创建服务实例。

var serviceProvider = services.BuildServiceProvider();

然后,我们可以通过服务提供者来获取服务实例并调用其方法。

IProductRepository productRepository = serviceProvider.GetRequiredService<IProductRepository>();
productRepository.GetProduct();
4、多实现类注册

在某些情况下,一个服务接口可能有多个实现类。我们可以注册这些实现类,并通过GetServices方法获取所有实现类的实例。

services.AddScoped<IProductService, ProductService>();
services.AddScoped<IProductService, ProductService2>();

解析并调用这些实现类的方法:

using (IServiceScope scope = serviceProvider.CreateScope())
{IEnumerable<IProductService> productServices = scope.ServiceProvider.GetServices<IProductService>();foreach (var productService in productServices){productService.SaveProduct();}
}

业务场景:

①多种数据源:例如,一个应用程序需要从不同的数据库或API获取数据,我们可以为每种数据源创建一个服务实现类。
②插件系统:在支持插件的系统中,不同的插件可能实现同一个接口,我们可以将它们注册为不同的服务实现类,然后在运行时调用所有插件的方法。

三、三种方式的IOC依赖注入代码示例

using Dunk.Common.Project.Injection.Injection;
using Microsoft.Extensions.DependencyInjection;namespace Dunk.Common.Project.Injection
{internal class Program{static void Main(string[] args){Console.WriteLine("Hello, World!");#region 使用 AddSingleton 注册//【1】 创建依赖注入(IOC容器)ServiceCollection services = new ServiceCollection();//【2】 注册服务,使用AddSingleton注册一个单例服务services.AddSingleton<IProductRepository, ProductRepository>(); // 注册另一个实现类services.AddSingleton<ProductService>(); // 注册具体类型//【3】 使用BuildServiceProvider取出服务var serviceProvider = services.BuildServiceProvider();//【4】 取对象,调用方法// 1、通过接口获取服务IProductRepository productRepository = serviceProvider.GetRequiredService<IProductRepository>();productRepository.GetProduct();// 2、或者通过具体类型获取服务ProductService productService = serviceProvider.GetRequiredService<ProductService>();productService.GetProduct();#endregion#region 使用 AddTransient 注册//【1】 创建依赖注入(IOC容器)ServiceCollection services = new ServiceCollection();//【2】 注册服务,使用AddSingleton注册一个单例服务services.AddTransient<IProductRepository, ProductRepository>(); // 注册另一个实现类services.AddTransient<ProductService>(); // 注册具体类型//【3】 使用BuildServiceProvider取出服务var serviceProvider = services.BuildServiceProvider();//【4】 取对象,调用方法// 1、通过接口获取服务IProductRepository productRepository = serviceProvider.GetRequiredService<IProductRepository>();productRepository.GetProduct();// 2、或者通过具体类型获取服务ProductService productService = serviceProvider.GetRequiredService<ProductService>();productService.GetProduct();#endregion#region 使用AddScoped 注册//【1】 创建依赖注入(IOC容器)ServiceCollection services = new ServiceCollection();//【2】 注册服务,使用AddSingleton注册一个单例服务services.AddScoped<IProductRepository, ProductRepository>(); // 注册另一个实现类services.AddScoped<ProductService>(); // 注册具体类型//【3】 使用BuildServiceProvider取出服务var serviceProvider = services.BuildServiceProvider();//【4】 取对象,调用方法using (IServiceScope scope = serviceProvider.CreateScope())// 创建作用域,范围{IProductRepository productRepository = scope.ServiceProvider.GetRequiredService<IProductRepository>();//通过接口获取服务productRepository.GetProduct();ProductService productService = scope.ServiceProvider.GetRequiredService<ProductService>(); //通过具体类型获取服务productService.GetProduct();}using (IServiceScope scope = serviceProvider.CreateScope())// 创建作用域,范围{IProductRepository productRepository = scope.ServiceProvider.GetRequiredService<IProductRepository>();//通过接口获取服务productRepository.GetProduct();ProductService productService = scope.ServiceProvider.GetRequiredService<ProductService>(); //通过具体类型获取服务productService.GetProduct();}#endregion#region 使用多实现类注册//【1】 创建依赖注入(IOC容器)ServiceCollection services = new ServiceCollection();//【2】 注册服务,使用AddSingleton注册一个单例服务services.AddScoped<IProductRepository, ProductRepository>(); // 注册另一个实现类services.AddScoped<IProductService, ProductService>(); // 注册另一个实现类services.AddScoped<IProductService, ProductService2>(); // 注册另一个实现类//services.AddScoped<ProductService>(); // 注册具体类型//services.AddScoped<ProductService2>(); // 注册具体类型//【3】 使用BuildServiceProvider取出服务var serviceProvider = services.BuildServiceProvider();//【4】 取对象,调用方法using (IServiceScope scope = serviceProvider.CreateScope())// 创建作用域,范围{// 使用GetServices方法取多个实现类IEnumerable<IProductService> productServices = scope.ServiceProvider.GetServices<IProductService>();foreach (var productService in productServices){productService.SaveProduct();}}#endregion}}
}

四、总结

通过本文的讲解,了解了如何在.NET 8中使用依赖注入组件来注册和解析服务。同时,探讨了几种不同的生命周期模式及其适用的业务场景。

http://www.dtcms.com/wzjs/125353.html

相关文章:

  • 网站图片滚动怎么做seo点击器
  • 济南制作网站公司免费网站推广网站在线
  • 做公司网站需要的资料百度推广总部电话
  • 怎样做公司网站查询网官网
  • 都安做网站网站建设策划
  • wordpress建好站了打不开首页网络营销主要做什么
  • 网站上的产品五星怎样做优化寰宇seo
  • 网站推广包含哪些方法济南网站建设哪家便宜
  • 别人做的网站企业网站seo优化外包
  • 网站图片怎么优化想开个网站怎样开
  • 浙江做网站多少钱在线培训app
  • 免费asp网站模板带后台山西优化公司
  • 哪个网站可以做电视背景墙广州网站seo公司
  • 哈尔滨最专业的网站建设微博指数
  • 个人网站建设方案长沙网络推广服务
  • 外贸导向企业网站优化网站排名方法教程
  • 做啤酒纸箱包装的网站网站推广软件下载安装免费
  • 网站中怎么做视频直播专门做推广的软文
  • 做网站就是做服务百度快速排名点击器
  • 网站用什么字体做正文网站营销策略有哪些
  • 免费建站cms成都十大营销策划公司
  • 淮南市住房与城乡建设委员会网站如何自己做一个软件
  • 网站建设情况存在问题电商怎么做如何从零开始
  • 武汉免费建设网站平台线上宣传推广方式
  • 外贸网站设计制作优化推广南宁网站seo
  • 徐州网站建设外包网站引流推广
  • 制作app免费网站模板下载广州seo推广营销
  • 网站推广的方法搜索引擎河源今日头条新闻最新
  • 淄博网络公司做网站的电话seo站长优化工具
  • 重庆网站建设制作设计公司哪家好今日头条淄博新闻