首页 > 编程语言 >C# IConfiguration 注入

C# IConfiguration 注入

时间:2023-07-31 09:55:34浏览次数:33  
标签:C# 配置 应用程序 IConfiguration configuration public 注入

在 C# 中,IConfiguration 是一个接口,用于在应用程序中管理配置数据。它是 .NET Core(现在称为 .NET 5+)和 ASP.NET Core 的一部分,用于轻松地读取和使用配置信息,例如数据库连接字符串、API密钥、日志设置等。

IConfiguration 接口是依赖注入的关键部分,它允许您将配置数据注入到您的应用程序中的其他组件中。通过依赖注入,您可以将 IConfiguration 实例传递给需要配置数据的类和服务,而不需要直接在每个地方读取配置文件或配置数据。

以下是关于 IConfiguration 注入的一般步骤:

配置文件:首先,您需要创建一个配置文件,比如 appsettings.json。在此文件中,您可以指定键值对,其中键表示配置项的名称,而值则表示配置项的值。例如:

json

{
"AppSettings": {
"ConnectionString": "Server=myserver;Database=mydb;User=myuser;Password=mypassword;",
"LogLevel": "Information"
}
}

注册 IConfiguration:在应用程序的启动时,需要将 IConfiguration 注册到依赖注入容器中。在 ASP.NET Core 中,通常在 Startup.cs 文件的 ConfigureServices 方法中进行注册:

csharp

using Microsoft.Extensions.Configuration;

// ...

public void ConfigureServices(IServiceCollection services)
{
IConfiguration configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.Build();

services.AddSingleton(configuration);
// 或者
// services.AddSingleton<IConfiguration>(configuration);

}

使用 IConfiguration:现在,您可以在需要配置数据的任何地方注入 IConfiguration。例如,假设您有一个名为 MyService 的服务需要使用连接字符串:

csharp

public class MyService
{
private readonly IConfiguration _configuration;

public MyService(IConfiguration configuration)
{
    _configuration = configuration;
}

public void DoSomething()
{
    string connectionString = _configuration["AppSettings:ConnectionString"];
    // 使用连接字符串执行操作
}

}

在上面的示例中,通过构造函数注入 IConfiguration,MyService 类现在可以访问 appsettings.json 文件中的连接字符串。

总结:IConfiguration 注入是一种将配置数据轻松传递给应用程序组件的方法。它使得管理配置数据更加简单,并遵循依赖注入的最佳实践,使代码更具可测试性和可维护性。

在C#中,IConfiguration是.NET Core和ASP.NET Core中用于处理配置数据的接口。它允许您从各种配置源(例如JSON文件、环境变量、命令行参数等)中读取配置信息,并将这些配置信息注入到应用程序的各个组件中,例如服务、控制器、中间件等。

IConfiguration接口定义了一组方法,用于访问配置数据。最常用的方法包括:

GetSection(string key): 用于获取指定配置节的子配置节。
GetValue(string key): 用于获取配置的值,返回一个字符串。
Bind(object instance): 用于将配置绑定到一个POCO(Plain Old CLR Object)实例上。

使用IConfiguration接口时,首先需要将配置信息加载到应用程序中。这通常在Program.cs中完成,可以通过以下步骤实现:

csharp

using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Configuration.Json;

public class Program
{
public static void Main(string[] args)
{
IConfiguration configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json") // 添加配置文件路径
.Build();

    // 将configuration传递给创建WebHost的代码
}

}

上述代码中,我们通过ConfigurationBuilder来构建IConfiguration实例,并使用AddJsonFile方法指定了一个名为"appsettings.json"的配置文件。您可以根据需求使用其他配置源。

一旦您在应用程序中配置好IConfiguration实例,您可以在需要配置数据的地方使用依赖注入来获取它。例如,如果您在ASP.NET Core应用程序中使用依赖注入,您可以在Startup类的ConfigureServices方法中注册IConfiguration:

csharp

using Microsoft.Extensions.DependencyInjection;

public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
IConfiguration configuration = ... // 获取IConfiguration实例,这里可以通过构造函数注入

    services.AddSingleton(configuration);
    // 或者 services.AddSingleton<IConfiguration>(configuration);
    // 或者 services.AddSingleton(typeof(IConfiguration), configuration);

    // 添加其他服务和组件的注册
}

}

一旦您将IConfiguration实例注册为服务,您可以在应用程序的其他部分通过构造函数注入它:

csharp

using Microsoft.Extensions.Configuration;

public class MyService
{
private readonly IConfiguration _configuration;

public MyService(IConfiguration configuration)
{
    _configuration = configuration;
}

public void SomeMethod()
{
    // 使用 IConfiguration 获取配置数据
    var settingValue = _configuration.GetValue<string>("SomeKey");
    // 或者您可以使用 GetSection 方法来获取更复杂的配置结构
    var subSectionValue = _configuration.GetSection("Some:Sub:Key").Value;
}

}

通过依赖注入IConfiguration,您可以在整个应用程序中轻松访问配置数据,而无需直接从配置文件中读取或在代

码中硬编码配置值。这使得您的应用程序更加灵活和易于配置。

 

 

 

出处:https://www.cnblogs.com/sendling/archive/2023/07/28/17588066.html

标签:C#,配置,应用程序,IConfiguration,configuration,public,注入
From: https://www.cnblogs.com/mq0036/p/17592668.html

相关文章

  • 使用 pip 出现 Script file ‘C:\Anaconda3\Scripts\pip-script.py‘ is not prese
    某天在虚拟环境使用pip更新tf的时候莫名其妙出现Scriptfile'D:\Anaconda3\Scripts\pip-script.py'isnotpresent的错误,之前用的还好好的,但是突然就不能用了,初步猜测是依赖库发生的更新,可以使用如下方式解决:1、进入创建的环境:activateenv_name2、输入:pyt......
  • GeometricProgression
    [ZJOI2008]骑士如果是一棵树,那么等价于没有上司的舞会。为了方便进行DP,我们将边的方向进行反转。然后我们可以考虑对于每一棵基环树,由于存在环的限制,我们可以断掉基环树上的一条边\((u,j)\),然后分类讨论:\(j\)不选,那么断掉之后\(u\)随意,直接树形DP。\(j\)选,在DP时......
  • 记一次线上问题 → Deadlock 的分析与优化
    开心一刻今天女朋友很生气女朋友:我发现你们男的,都挺单纯的我:这话怎么说女朋友:脑袋里就只想三件事,搞钱,跟谁喝点,还有这娘们真好看我:你错了,其实我们男人吧,每天只合计一件事女朋友:啥事呀?我:这娘们真好看,得搞钱跟她喝点问题复现需求背景......
  • grub2-mkconfig
    grub2-mkconfig生成grub.cfg配置文件。语法用法:grub2-mkconfig[OPTION]生成grub配置文件-o,--output=FILE将生成的配置输出到FILE文件[default=stdout]-h,--help打印这个文件并退出-v,--version打印版本信息并退出......
  • 怎么还有函数参数不支持引用的?(Excel函数集团)
    函数公式中的参数绝大部分情况下是可以用以下四种:常量引用公式运算(包括函数、四则运算等)自定义名称有少部分函数的参数只支持引用,比如Sumif的第一、第三参数,Subtotal除第一参数以外的其他所有参数等等。但是,有一个函数的参数的特殊用法,只要是引用就会甩脸子,这个函数就是XL......
  • IIS创建网站报错 \\?\C:\Windows\inetsrv\config\applicationHost.config
    ​ ​​编辑​​编辑 现象:IIS创建不了网站,IIS配置没有发生改变 原因:服务器C盘无空间,释放空间后问题解决。​......
  • Binary String Copying
    Smiling&Weeping----第一次见你的时候,在我的心里已经炸成了烟花,需要用一生来打扫灰炉。题目链接:Problem-C-Codeforces题目大意不难,就是把每种......
  • vs(visual stuiod)中vc++工程的Filter和Folder及vcxproj知识
    vs中创建Filter在一个新项目中右键-Add-New,默认只有一选项NewFilter。创建出来的Filter可以理解为是VS的过滤器(虚拟目录),它不会在本地的磁盘上新建目录,而是修改了.filters文件,把这种目录关系记录在.filters文件中。新建一个vc++project,默认有这几种Filter,当然在实际的......
  • 【每日一题】Problem 653B. Bear and Compressing
    原题解决思路根据当前字符串的首字符进行深度递归即可误区字符串是从头开始匹配的,因此只需要对首字符进行替换#include<bits/stdc++.h>intdfs(std::map<char,std::vector<std::string>>&r,charc,intn,inttarget){if(n==target){retu......
  • 记一次简单的bkcrack明文攻击
    记一次简单的bkcrack明文攻击平时在网上下载资源的时候,经常使用到慢到离谱的百度网盘去下载,如果只是下载慢,还可以接受,但是千辛万苦下载下来的资源居然是需要密码的,这个谁能接受,就好像你追求了很久的女朋友突然跟别人走了。这个自然无法接受所需工具bkcrack:强大的明文攻击......