我有一个使用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;
}
}
}
答案 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();
//...
}