c# - 如何在 Nuget Package 项目中读取父项目的 appsettings.json?
问题描述
我正在创建一个将成为 Nuget 包的应用程序。假设这个应用程序的名称是 MyPackage。
我将在另一个项目中安装这个包。假设这个项目的名称是 MyProject。
如何在 MyPackage 项目中读取 MyProject 项目的 appsettings.json?
解决方案
我能想到几个选项。两者都假设您正在参与依赖注入,并且“appsettings.json”实际上是指配置框架。
一种选择是指定IConfiguration
为依赖项。这使您可以访问所有配置密钥。假设您正在使用构造函数注入,它看起来像这样:
public class MyPackageClass
{
public MyPackageClass(IConfiguration configuration)
{
// use configuration here
}
}
更好的选择是从包中导出配置类,将该类绑定到依赖项注册代码中的配置,然后使用IOptions
or将其注入到包类中IOptionsMonitor
。
假设您的配置类如下所示:
public class MyPackageSettings
{
public string FirstSetting { get; set; }
}
您的注册码如下所示:
public static class ServiceCollectionExtensions
{
public static IServiceCollection AddMyPackage(this IServiceCollection services, IConfiguration configuraiton)
{
services.Configure<MyPackageSettings>(configuration.GetSection("MyPackage");
// add other package classes to services
return services;
}
}
你会像这样使用你的包类中的配置:
public class MyPackageClass
{
public MyPackageClass(IOptions<MyPackageSettings> options)
{
string firstSettingValue = options.Value.FirstSetting;
}
}
您的文档需要指定用户必须在其 appsettings.json(或其他配置源)中提供配置。对于 appsettings.json,它需要看起来像这样:
{
"MyPackage": {
"FirstSetting": "one"
}
}
有关使用选项的更多信息:https ://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/options?view=aspnetcore-5.0
推荐阅读
- javascript - useEffect 中的依赖数组 - 我应该传递所有参数
- python - tensorflow with GPU,怎么看tensorflow是用GPU的?
- php - 如何在 WooCommerce 管理订单列表中的买家姓名后添加第一个订单消息
- azure - 使用参数化数据库连接部署 Azure 数据工厂
- angular - 无法在 Angular 中的组件之间发送数据
- python - 显示所选文件夹中的图像
- php - 碳 - Laravel - 按天分开
- c# - 如何从 C# 应用程序中获取 SSIS 项目参数列表
- c++ - 如何在 Microsoft Visual Studio 中启用“C++ 编译器”选项以将 C++ 编译器设置为 g++?
- javascript - 上午 11:40 到下午 12:20(11:40 < 12:20)之间的 Javascript 时间条件