首页 > 其他分享 >DependencyInjection组件的综合应用案例(4)

DependencyInjection组件的综合应用案例(4)

时间:2023-12-18 17:58:55浏览次数:39  
标签:string 案例 提供者 services static Path 组件 DependencyInjection public

延续上一篇文章,这篇文章新增一个Ini文件配置提供者,并从注入环境变量配置修改为注入Ini配置的步骤,让大家体验下依赖注入的便捷

Ini配置:

 class IniConfigProvider : IConfigProvider
 {
     public string Path { get; set; }
     public string GetValue(string Name)
     {
        var keyValues= File.ReadAllLines(Path).Select(x => x.Split('=')).Select(x => new { Name = x[0], Value = x[1] });
        var keyValue=  keyValues.Where(x => x.Name == Name).SingleOrDefault();
        return keyValue!=null?keyValue.Value : string.Empty;

     }
 }


public static class ConfigProviderExtensions
{

    public static void AddEnvVarConfig(this IServiceCollection services)
    {
        services.AddScoped<IConfigProvider, EnvVarConfigProvider>();
    }

    /// <summary>
    ///注册Ini配置提供者
    /// </summary>
    /// <param name="services"></param>
    public static void AddIniConfig(this IServiceCollection services,string path)
    {
        //因为IniConfigProvider需要初始化Path,所以使用AddScoped(this IServiceCollection services, Type serviceType, Func<IServiceProvider, object> implementationFactory)这个重载
        services.AddScoped<IConfigProvider>(x => new IniConfigProvider() { Path = path });
    }

}

在MailServicesConsole中添加ini文件(config.ini),ini内容如下:

[email protected]
User=Tony
Password=123456

Main函数修改如下:

  static void Main(string[] args)
  {
      ServiceCollection services = new ServiceCollection();
      services.AddLog();
      // services.AddEnvVarConfig();
      services.AddIniConfig("config.ini");
      services.AddMail();

     using(ServiceProvider sp=services.BuildServiceProvider())
      {
         
          IMailSender mailSender = sp.GetRequiredService<IMailSender>();
          mailSender.Send("[email protected]", "Lily", "hello,Nice to meet you");
      }
  }

输出:

 可以看到,当更换一个配置提供者时,只需要增加一个配置提供者的具体实现,并通过扩展方法把配置提供者注册到容器,用户只需要从.AddEnvVarConfig()改为.AddIniConfig()即可

 

标签:string,案例,提供者,services,static,Path,组件,DependencyInjection,public
From: https://www.cnblogs.com/luohualiushui1173/p/17911493.html

相关文章

  • DependencyInjection组件的综合应用案例(3)
    目的:通过一个较综合的案例演示依赖注入的使用需求:有配置服务、日志服务,然后再开发一个邮件发送器服务。      可以通过配置服务来从文件、环境变量、数据库等地方读取配置,      可以通过日志服务来将程序运行过程中的日志信息写入文件、控制台、数据库等......
  • 验证码组件开发,本地缓存倒计时
    vue组件<template><divclass="verifyCodemt-24"><divclass="header"><spanclass="logoinline-blockmr-6w-[26px]h-[26px]bg-black-0"></span><spanclass=&......
  • kettle组件控制操作MySQL
    使用kettle执行脚本:然后保存执行实现以下效果;转换参数:实现变量转换:deletefromtestwhereuserid='${userid}';实现效果:100被删除......
  • 工银安盛&原点安全:一体化大数据使用安全与合规解决方案|入选中国信通院「星熠」案例
    近日,为推动数据安全产业蓬勃、可持续发展,发挥优秀案例示范引领作用,加强优秀案例推广,中国信息通信研究院“数据安全共同体计划”于今年 7 月启动数据安全“星熠”案例遴选工作,历时 5 个月的案例征集、初评、答辩和终评,于 2023 年 12 月初,中国信息通信研究院“数据安全共同体......
  • 函数function及案例
    <!DOCTYPEhtml><html><head><metacharset="utf-8"><title></title></head><body><script>/*Function函数是一个复杂的数据类型......
  • 鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Text文本组件
    鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之文本组件一、操作环境操作系统: Windows10专业版IDE:DevEcoStudio3.1SDK:HarmonyOS3.1编辑二、文本组件Text 是显示文本的基础组件之一,它可以包含子组件 Span ,当包含 Span 时不生效,只显示 Span 的内容。Text('我是Text'){Span('......
  • 记三次升级 TiDB 集群到 v6.1.5 遇到的案例分析过程&升级收益
    作者:Yifei_Jia团队升级TiDB版本的事情是规划很久了,迟迟没操作还是因为很多预期意外的问题是否有能力覆盖解决。本文写的时间是8月底,今天刚好总结的时候看到了分享给大家以作为版本升级的参考。我们的业务集群TiDB数据量本身是很大,单集群数十TB规模,加之业务的重要性,本着非必要不升......
  • 十三、组件-通用属性-点击事件
    组件是构建页面的核心,每个组件通过对数据和方法的简单封装,实现独立的可视、可交互功能单元。组件之间相互独立,随取随用,也可以在需求相同的地方重复使用。@Entry@ComponentstructClick{@Statetext:string=''build(){Column(){Row({space:20}){......
  • React useEffect 在组件挂载时运行了两次
    在使用useEffect这个hook时,发现useEffect会执行2次useEffect(()=>{console.log("执行useEffect");},[]);控制台输出:执行useEffect执行useEffect查看疑难解答官方文档,官方解释如下:在开发环境下,如果开启严格模式,React会在实际运行setup之前额外运行一次......
  • NodeRed入门案例,在控制台输出Hello World!
    1、打开NodeRed软件,将inject控件拖入到流程绘制区域,因为我们需要提供HelloWorld!的输入内容。2、将debug控件拖入到流程绘制区域,因为我们要将输入到Inject控件输入的内容输出到控制台(调试窗口)。3、将控件连接并部署。4、测试编写的流程。5、点击inject控件的左侧按钮触......