首页 > 其他分享 >.net 依赖注入 基本原理学习

.net 依赖注入 基本原理学习

时间:2023-11-27 18:23:27浏览次数:42  
标签:依赖 AddScoped 调用者 ServiceCollection 基本原理 AddTxtConfig 注册 services net

实例化带参数类

如果一个类,在初始化时需要带一个参数,则在注册时使用AddScopedAddTransientAddSingleton的回调函数。

services.AddScoped<IConfigService>(s=>new TxtConfigServer() { FileName = "mail.ini"});

使用扩展方法注册

在注册时需要使用AddScopedAddTransientAddSingleton这三个方法来注册,如果一个功能需要注册很多个服务,则对调用者来说是一件很麻烦的事情,其中有一个服务未注册则会导致失败。
这时候如果可以把这些服务封装成一个方法,调用者直接.Add,不需要关心都注册哪些服务,就会很方便。
这种行为可以用扩展方法来实现。

1. 首先创建一个静态类,将静态类的命名空间改为Microsoft.Extensions.DependencyInjection,然后创建一个静态方法,扩展ServiceCollection
namespace Microsoft.Extensions.DependencyInjection
{
    public static class TxtConfigServerRegister
    {
		// 调用者需要传入 fileName参数
        public static void AddTxtConfig(this ServiceCollection services,string fileName)
        {
            services.AddScoped<IConfigService>(s=>new TxtConfigServer() { FileName = fileName });
        }
    }
}
2. 调用者直接.AddTxtConfig即可注册服务
ServiceCollection services = new ServiceCollection();
services.AddTxtConfig("mail.ini");

标签:依赖,AddScoped,调用者,ServiceCollection,基本原理,AddTxtConfig,注册,services,net
From: https://www.cnblogs.com/sunhouzi/p/17860062.html

相关文章

  • .net 依赖注入“传染性”
    .net依赖注入使用的是构造函数注入方式,并且具有传染性。比如有一个控制器中使用了日志和存储两个类,而存储中使用了日志类和配置类,则都只需要在其构造函数中写需要的类,然后在容器中注册,就可以直接使用。日志类代码//日志接口publicinterfaceILog{publicvoidLog(str......
  • .net 控制反转(IoC)和依赖注入(DI)
    引言控制反转(IoC)实现方法:(隐式)依赖注入:需要什么服务(类),直接在类里面写,然后系统在创建类的时候给服务(类)自动赋值。(显式)服务定位器:需要什么服务(类)在给服务定位器要什么服务(类)1.初始化使用引用包:Microsoft.Extensions.DependencyInjection首先需要创建一个容器:ServiceCollec......
  • 转:在.NET FX 4.8项目中使用C# 8/9/10的新语法
    在.NETFX4.8项目中使用C#8/9/10的新语法吴冬wdhustInnovativeBIMtechniques 受到某些特殊原因的限制,有时候.NET项目被锁死在.NETFramework4.8,而无法升级到.NET5等更高版本,导致代码中能够使用的C#语法最高只能支持到C#7.3,而无法使用C#8及更高版......
  • 构建卓越Kubernetes安全之路:最佳实践与军规
    Kubernetes作为现代云原生计算的中流砥柱,其安全性是我们构建稳健应用生态的首要任务。在这篇博文中,我们将探讨构建卓越Kubernetes安全的道路,通过最佳实践和制定安全军规,确保您的集群免受威胁。1. 了解威胁与风险在开始构建安全之旅之前,深入了解可能的威胁和风险是关键一步。考虑容......
  • 快速入门:使用 Azure CLI 部署 Azure Kubernetes 服务 (AKS) 群集
    原文:https://learn.microsoft.com/zh-cn/azure/aks/learn/quick-kubernetes-deploy-cli本文内容开始之前创建资源组创建AKS群集连接到群集显示另外4个AzureKubernetes服务(AKS)是可用于快速部署和管理群集的托管式Kubernetes服务。在本快速入门中,请执行以下操......
  • Kubernetes全面指南:从入门到精通
    Kubernetes,简称K8s,作为云原生时代的领军者,已经成为容器编排和管理的事实标准。无论您是初学者还是有经验的开发者,本篇博文将带您深入了解Kubernetes,从基础概念到高级技术,逐步引领您进入这个强大的开源平台的世界。第一部分:初识Kubernetes1.1什么是Kubernetes?Kubernetes是一个开源......
  • 2023 合肥站 热身赛 B Problem F. Flower’s Land 换根dp 依赖背包
    传送门。求出包含某个点连通块大小为K的权值和最大值。钦定1为根节点,只求根节点的答案,其实是一个依赖性01背包问题可以\(nk\)的时间内解决。考虑进行换根操作,由于背包是取max的背包没办法进行背包的删除,然而取前后缀背包背包的合并为\(k^2\)复杂度过高。当时还有一个想法是点......
  • Netty 源码分析
    ServerBootstrap主要介绍服务端的启动流程以及如何绑定端口号、开启服务端Socket并让其进入接收连接状态的启动模板如下;try{ChannelFuturefuture=newServerBootstrap().group(bossGroup,workerGroup).channel(NioServerSocketChannel.class)......
  • .net core 6 由数据库生成对应实体类
    首先按照网上其他朋友的教程,安装对应程序包 然后在程序包管理器控制台中执行Scaffold-DbContext,总是报错,各种各样的错误,说未引用的程序包之类的。最后找到的解决办法是,在vs的菜单栏中找到视图--终端,然后在下方弹出的“开发者PowerShell”中输入命令 dotnetefdbcontexts......
  • Sb7:关于.net使用WCF过程中遇到的坑
    最近写了一个类似QQ升级的功能。使用wcf编写了一个服务端。 做了四个接口服务,可以根据软件编号查询所有版本号,可以根据版本查询所有待升级文件,远程获取升级文件。在做服务的时候原计划GetFile方法中采用异步同时传输,将大文件切割成多个模块进行传输,在客户端接收完后重新组包再......