在 ASP.NET Core 应用程序中加载自定义 ConfigSection
Posted
技术标签:
【中文标题】在 ASP.NET Core 应用程序中加载自定义 ConfigSection【英文标题】:Load Custom ConfigSection in ASP.NET Core Application 【发布时间】:2018-01-22 22:29:28 【问题描述】:我们有一个新的 ASP.NET Core 2.0 应用程序,但我们需要使用 .NET Framework 4.6.1 库,该库需要访问 Web.config(或类似)中定义的自定义 ConfigSection .初始尝试导致错误,表明内部组件无法加载/找到该部分。这在非核心应用程序中运行良好,我们希望有一种方法可以在核心中实现这一点。
这是一个如何在配置文件中注册的示例。
<configSections>
<section name="data-connector" type="Connector.Configuration.ConnectorConfigSection, Connector" />
</configSections>
如果有帮助,组件将使用以下代码加载其配置部分。
/// <summary>
/// Loads an instance of a specified configuration section or a default instance if one was not found
/// </summary>
/// <typeparam name="T">The Configuration Section type to be loaded</typeparam>
/// <param name="sectionName">The name/path of the section to be loaded as seen in the config file</param>
public static T GetSectionInstance<T>(string sectionName) where T : ConfigurationSection
if (string.IsNullOrEmpty(sectionName)) throw new ArgumentNullException("sectionName");
var instance = (ConfigurationSection)ConfigurationManager.GetSection(sectionName);
return (instance == null || !typeof(T).IsAssignableFrom(instance.GetType()))
? Activator.CreateInstance<T>()
: instance as T;
我们可以要求组件所有者对其加载过程进行更改,但我们不能将其设为原生核心组件。
是否有解决方法来确保仍然可以支持 web.config 部分?
【问题讨论】:
你可以访问设置文件源代码(通常由VS生成)吗?如果是,也许您可以将其移植到 .NET Core?加载逻辑应该很基本吧? 抱歉 Meikel,这不是我们的选择。 【参考方案1】:如果您在 .NET Framework 上使用 ASP.NET Core 2.0,则需要使用 app.config 而不是 web.config。
【讨论】:
【参考方案2】:您可以在Startup.ConfigureServices
中使用 DI 容器添加配置或其部分,并将其注入控制器或服务女巫将使用您的库。
【讨论】:
我们很乐意这样做,但我们不明白如何做到这一点。可以提供样品吗? docs.microsoft.com/en-us/aspnet/core/fundamentals/… 应该可以帮助您在 .Net Core 中开始使用 DI 请阅读这里:***.com/questions/39231951/… 之后您所需要的一切。是将您的配置传递给您的类库中的注入位置和使用位置。 这似乎不能回答 OP 的(完全合理的)问题,至少不是没有例子。我已经阅读了您发布的链接(在评论中),但它似乎并没有具体涵盖实现这一目标的必要条件。请在答案本身中添加有关如何使这项工作(如果知道)的详细信息。 DI 将是答案如果组件供应商可以这样做,但如果组件希望从自定义配置部分获取设置,这可能不起作用。【参考方案3】:Just create an App.config like below. Working in ASP.NET Core.
<configuration>
<configSections>
<section name="EmailConfig" type="MyApp.Handler,MyApp">
</configSections>
<EmailConfig to = "to@test.com" from="from@test.com"
subject="test" body ="" />
</configuration>
【讨论】:
以上是关于在 ASP.NET Core 应用程序中加载自定义 ConfigSection的主要内容,如果未能解决你的问题,请参考以下文章
在 Elasticsearch 中加载自定义同义词文件时出错
在 ASP.NET Core PartialView 中加载脚本后渲染脚本部分
在自定义 ASP.NET Core 配置提供程序中停止 SqlDependency