Ninject在注册时使用配置管理器时出错。在应用程序的预启动初始化阶段期间无法调用此方法

时间:2014-07-17 16:07:41

标签: c# web-config ninject configurationmanager

我有一个使用Ninject的C#4.0 Mvc 4 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>

访问值的代码:

ConfigurationManager.GetSection("apiUserGroup/apiUser") as ApiUserSection;

完整堆栈跟踪(不是非常完整):

描述:处理为此请求提供服务所需的配置文件时发生错误。请查看下面的具体错误详细信息并适当修改配置文件。

分析程序错误消息:为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;
        }
    }

}

1 个答案:

答案 0 :(得分:0)

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

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

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

YourHttpClient构造函数中:

public YourHttpClient(Func<ApiUserSection> apiUserSettings)
{
  var userSettings = apiUserSettings();
  //...
}