C# 注册时使用配置管理器时出现Ninject错误。在应用程序';s启动前初始化阶段

C# 注册时使用配置管理器时出现Ninject错误。在应用程序';s启动前初始化阶段,c#,web-config,ninject,configurationmanager,C#,Web Config,Ninject,Configurationmanager,我有一个使用Ninject的C#4.0 MVC4 web应用程序。一切都正常,但当我尝试使用configurationmanager类访问Web.config节中的值时,我遇到了以下错误:“为apiUserGroup/apiUser创建配置节处理程序时出错:无法在应用程序启动前初始化阶段调用此方法。”。我可以访问应用程序设置和连接字符串,但不能访问配置部分。该部分已经使用了一段时间,所以我知道这不是配置设置问题。有什么想法吗 配置: <configSections>

我有一个使用Ninject的C#4.0 MVC4 web应用程序。一切都正常,但当我尝试使用configurationmanager类访问Web.config节中的值时,我遇到了以下错误:“为apiUserGroup/apiUser创建配置节处理程序时出错:无法在应用程序启动前初始化阶段调用此方法。”。我可以访问应用程序设置和连接字符串,但不能访问配置部分。该部分已经使用了一段时间,所以我知道这不是配置设置问题。有什么想法吗

配置:

     <configSections>

   <sectionGroup name="apiUserGroup">
      <section name="apiUser" type="JobTracker.Code.ApiUserSection" />
    </sectionGroup>
  </configSections>

  <apiUserGroup>
    <apiUser userName="XXXX" passWord="XXXX" role="API" />
  </apiUserGroup>
完整堆栈跟踪(不是非常完整的跟踪):

描述:处理服务此请求所需的配置文件时出错。请查看下面的特定错误详细信息,并适当修改配置文件

分析器错误消息:为apiUserGroup/apiUser创建配置节处理程序时出错:在应用程序的预启动初始化阶段无法调用此方法

ApiUserSection如下所示:

public class ApiUserSection : ConfigurationSection
{
    [ConfigurationProperty("userName", DefaultValue = "false", IsRequired = true)]
    public string UserName
    {
        get
        {
            return (string)this["userName"];
        }
        set
        {
            this["userName"] = value;
        }
    }

    [ConfigurationProperty("passWord", DefaultValue = "false", IsRequired = true)]
    public string PassWord
    {
        get
        {
            return (string)this["passWord"];
        }
        set
        {
            this["passWord"] = value;
        }
    }

    [ConfigurationProperty("role", DefaultValue = "false", IsRequired = true)]
    public string Role
    {
        get
        {
            return (string)this["role"];
        }
        set
        {
            this["role"] = value;
        }
    }

}

您可以将调用包装到
ConfigurationManager.GetSection()
Func
中,将其作为构造函数参数传递,从而将执行推迟到应用程序初始化之后,如下所示:

Func<ApiUserSection> apiUserSection = () =>
  {
    return ConfigurationManager.GetSection("apiUserGroup/apiUser") as ApiUserSection;
  };

kernel.Bind<YourHttpClient>().ToSelf()
  .WithConstructorArgument("apiUserSettings", apiUserSection);

你能发布你的web.config吗?谢谢。你能提供完整的堆栈跟踪吗?这个函数在你的MVC项目中的什么地方被调用?它在我注册接口的NinjectWebCommon中被调用。我获取此对象,以便可以将api密钥和用户名用作http客户端的构造函数参数。在appsettings中设置此参数时会发生什么<代码>
Func<ApiUserSection> apiUserSection = () =>
  {
    return ConfigurationManager.GetSection("apiUserGroup/apiUser") as ApiUserSection;
  };

kernel.Bind<YourHttpClient>().ToSelf()
  .WithConstructorArgument("apiUserSettings", apiUserSection);
public YourHttpClient(Func<ApiUserSection> apiUserSettings)
{
  var userSettings = apiUserSettings();
  //...
}