在ASP.NET核心应用程序中加载自定义ConfigSection

时间:2018-01-22 22:29:29

标签: c# asp.net-core

我们有一个新的 ASP.NET Core 2.0 应用程序但我们需要使用.NET Framework 4.6.1库,该库需要访问Web.config(或类似版本)中定义的Custom ConfigSection 。初始尝试会导致错误,指示内部组件无法加载/查找该部分。这在非核心应用程序中运行良好,我们希望有一种方法可以在Core中实现这一功能。

以下是在配置文件中注册的示例。

<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部分?

3 个答案:

答案 0 :(得分:2)

如果您在.NET Framework上使用ASP.NET Core 2.0,那么您将需要使用app.config而不是web.config。

答案 1 :(得分:0)

您可以在Startup.ConfigureServices中使用DI容器添加配置或其部分,并将其注入控制器或服务中,将使用您的库。

答案 2 :(得分:0)

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>