最近项目遇到需要读取RedisSessionStateProvider配置文件applicationName节点,如:
读取的方法有很多:
1直接读取web.config文件,
void test1()
{
SessionStateSection config = (SessionStateSection)WebConfigurationManager.GetSection("system.web/sessionState");
string providerName = config.CustomProvider;
ProviderSettings ps = config.Providers[providerName];
string str = ps.Parameters["applicationName"];
}
2通过SessionStateStoreProviderBase来访问对象属性, 可惜的是对应的属性及类都是内部的,所以我们需要用到反射。
所以编码为如下:
void test2()
{
var type = typeof(RedisSessionStateProvider);
//获取RedisSessionStateProvider的静态configuration字段
var configField = type.GetField("configuration", BindingFlags.Static | BindingFlags.NonPublic);
var configValue = configField.GetValue(new RedisSessionStateProvider());
type = configField.FieldType;
//获取configuration的ApplicationName属性
var prop = type.GetProperty("ApplicationName");
var obj = prop.GetValue(configValue).ToString();
}
T GetSessionStateStoreProviderBase<T>() where T : Se