首页 > 解决方案 > 如何在 Nuget Package 项目中读取父项目的 appsettings.json?

问题描述

我正在创建一个将成为 Nuget 包的应用程序。假设这个应用程序的名称是 MyPackage。

我将在另一个项目中安装这个包。假设这个项目的名称是 MyProject。

如何在 MyPackage 项目中读取 MyProject 项目的 appsettings.json?

标签: c#asp.net.netnugetnuget-package

解决方案


我能想到几个选项。两者都假设您正在参与依赖注入,并且“appsettings.json”实际上是指配置框架。

一种选择是指定IConfiguration为依赖项。这使您可以访问所有配置密钥。假设您正在使用构造函数注入,它看起来像这样:

public class MyPackageClass
{
    public MyPackageClass(IConfiguration configuration)
    {
        // use configuration here
    }
}

更好的选择是从包中导出配置类,将该类绑定到依赖项注册代码中的配置,然后使用IOptionsor将其注入到包类中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


推荐阅读