【发布时间】:2019-04-02 13:28:17
【问题描述】:
我正在将一个库从 .NET 框架转换为 .NET 标准,作为其中的一部分,我需要迁移到新的 ConfigurationBuilder 样式以进行配置管理。
该库被多个组件引用,包括使用 .NET 框架或 .NET 核心的 Web 应用程序和类库。
该库有自己的配置文件和用于配置管理的内部类。
以下是一个精简的例子:
internal interface IConfigManager
{
string Name { get; }
}
internal class ConfigManager : IConfigManager
{
private readonly IConfiguration _config;
public ConfigManager()
{
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("configTestLibSettings.json");
this._config = builder.Build();
}
public string Name => this._config["name"];
}
public interface IConfigTestLib
{
string GetName();
}
public class ConfigTestLib : IConfigTestLib
{
private readonly IConfigManager _configManager = new ConfigManager();
public string GetName()
{
return this._configManager.Name;
}
}
对于该库的大多数使用者来说,这工作正常,我需要做的就是确保将 configTestLibSettings.json 复制到输出文件夹并且该类按预期工作。
但是对于 .NET Framework Web 应用程序Directory.GetCurrentDirectory() 实际上返回 IISExpress 的位置,而不是构建位置。因此找不到配置文件。
有可能解决这个问题吗?
我知道我可以在我的 Web 应用程序中获取 HttpRuntime.AppDomainAppPath 的值,并通过依赖注入将其作为基本路径传入,但是我真的不想彻底改变我的库的接口。
【问题讨论】:
标签: c# asp.net-core configuration configurationmanager