Suppose i have explained example with Browser Compatibility Configuration with Custom config section.
Register Configuration Class into Config Section in Config File.
<configSections>
<section name="BrowserConfiguration" type="Demo.Web.BrowserConfiguration, Demo" allowDefinition="Everywhere" allowLocation="true"/>
</configSections>
Add Your Configuration below Config Section Tag into Web.Config/App.Config
<BrowserConfiguration>
<platforms>
<platform name="winnt">
<browsers>
<browser browsername="IE" version="10"></browser>
<browser browsername="FIREFOX" version="9"></browser>
<browser browsername="CHROME" version="25"></browser>
</browsers>
</platform>
<platform name="mac">
<browsers>
<browser browsername="IE" version="8"></browser>
<browser browsername="CHROME" version="20"></browser>
</browsers>
</platform>
<platform name="mobile">
<browsers>
<browser browsername="IE" version="4"></browser>
<browser browsername="CHROME" version="10"></browser>
</browsers>
</platform>
</platforms>
</BrowserConfiguration>
Register Configuration Class into Config Section in Config File.
<configSections>
<section name="BrowserConfiguration" type="Demo.Web.BrowserConfiguration, Demo" allowDefinition="Everywhere" allowLocation="true"/>
</configSections>
Add Your Configuration below Config Section Tag into Web.Config/App.Config
<BrowserConfiguration>
<platforms>
<platform name="winnt">
<browsers>
<browser browsername="IE" version="10"></browser>
<browser browsername="FIREFOX" version="9"></browser>
<browser browsername="CHROME" version="25"></browser>
</browsers>
</platform>
<platform name="mac">
<browsers>
<browser browsername="IE" version="8"></browser>
<browser browsername="CHROME" version="20"></browser>
</browsers>
</platform>
<platform name="mobile">
<browsers>
<browser browsername="IE" version="4"></browser>
<browser browsername="CHROME" version="10"></browser>
</browsers>
</platform>
</platforms>
</BrowserConfiguration>
Create Class For Configuration as Below.
public class BrowserElement : ConfigurationElement
{
[ConfigurationProperty("browsername", IsRequired = true, IsKey = true)]
public string BrowserName
{
get
{
return this["browsername"] as string;
}
}
[ConfigurationProperty("version", IsRequired = true, DefaultValue = 1.0)]
public double Version
{
get
{
return Convert.ToDouble(this["version"]);
}
}
}
public class BrowserCollection : ConfigurationElementCollection
{
public new BrowserElement this[string name]
{
get
{
if (IndexOf(name) < 0)
return null;
return (BrowserElement)BaseGet(name);
}
}
public BrowserElement this[int index]
{
get
{
return (BrowserElement)BaseGet(index);
}
}
public int IndexOf(string name)
{
for (int idx = 0; idx < base.Count; idx++)
{
if (this[idx].BrowserName.Equals(name, StringComparison.CurrentCultureIgnoreCase))
return idx;
}
return -1;
}
public int IndexOf(BrowserElement browser)
{
return BaseIndexOf(browser);
}
public override ConfigurationElementCollectionType CollectionType
{
get { return ConfigurationElementCollectionType.BasicMap; }
}
protected override ConfigurationElement CreateNewElement()
{
return new BrowserElement();
}
protected override object GetElementKey(ConfigurationElement element)
{
return ((BrowserElement)element).BrowserName;
}
protected override string ElementName
{
get { return "browser"; }
}
}
public class PlatformElement : ConfigurationElement
{
private string m_platform = "winnt";
[ConfigurationProperty("name", IsKey = true, IsRequired = true)]
public string Name
{
get
{
return Convert.ToString(base["name"]);
}
}
[ConfigurationProperty("browsers", IsDefaultCollection = false)]
public BrowserCollection Browsers
{
get
{
return (BrowserCollection)base["browsers"];
}
}
}
public class PlatformCollection : ConfigurationElementCollection
{
new public PlatformElement this[string name]
{
get
{
if (IndexOf(name) < 0)
return null;
return (PlatformElement)BaseGet(name);
}
}
public PlatformElement this[int index]
{
get
{
return (PlatformElement)BaseGet(index);
}
set
{
if (BaseGet(index) != null)
{
BaseRemoveAt(index);
}
BaseAdd(index, value);
}
}
public int IndexOf(string name)
{
for (int idx = 0; idx < base.Count; idx++)
{
if (this[idx].Name.Trim().Equals(name, StringComparison.CurrentCultureIgnoreCase))
return idx;
}
return -1;
}
public int IndexOf(PlatformElement platform)
{
return BaseIndexOf(platform);
}
public override ConfigurationElementCollectionType CollectionType
{
get
{
return ConfigurationElementCollectionType.BasicMap;
}
}
protected override ConfigurationElement CreateNewElement()
{
return new PlatformElement();
}
protected override Object GetElementKey(ConfigurationElement element)
{
return ((PlatformElement)element).Name;
}
public void Add(PlatformElement platform)
{
BaseAdd(platform);
}
protected override void BaseAdd(ConfigurationElement element)
{
BaseAdd(element, false);
}
public void Remove(PlatformElement platform)
{
if (BaseIndexOf(platform) >= 0)
BaseRemove(platform.Name);
}
public void RemoveAt(int index)
{
BaseRemoveAt(index);
}
public void Remove(string name)
{
BaseRemove(name);
}
public void Clear()
{
BaseClear();
}
protected override string ElementName
{
get { return "platform"; }
}
}
public class BrowserConfiguration : ConfigurationSection
{
private static string m_ConfigurationSectionConst = "BrowserConfiguration";
public static BrowserConfiguration GetConfig()
{
return (BrowserConfiguration)ConfigurationManager.GetSection(BrowserConfiguration.m_ConfigurationSectionConst) ?? new BrowserConfiguration();
}
[ConfigurationCollection(typeof(PlatformCollection), AddItemName = "platform")]
[ConfigurationProperty("platforms", IsDefaultCollection = true)]
public PlatformCollection Platforms
{
get
{
return (PlatformCollection)this["platforms"] ?? new PlatformCollection();
}
}
}
public class BrowserElement : ConfigurationElement
{
[ConfigurationProperty("browsername", IsRequired = true, IsKey = true)]
public string BrowserName
{
get
{
return this["browsername"] as string;
}
}
[ConfigurationProperty("version", IsRequired = true, DefaultValue = 1.0)]
public double Version
{
get
{
return Convert.ToDouble(this["version"]);
}
}
}
public class BrowserCollection : ConfigurationElementCollection
{
public new BrowserElement this[string name]
{
get
{
if (IndexOf(name) < 0)
return null;
return (BrowserElement)BaseGet(name);
}
}
public BrowserElement this[int index]
{
get
{
return (BrowserElement)BaseGet(index);
}
}
public int IndexOf(string name)
{
for (int idx = 0; idx < base.Count; idx++)
{
if (this[idx].BrowserName.Equals(name, StringComparison.CurrentCultureIgnoreCase))
return idx;
}
return -1;
}
public int IndexOf(BrowserElement browser)
{
return BaseIndexOf(browser);
}
public override ConfigurationElementCollectionType CollectionType
{
get { return ConfigurationElementCollectionType.BasicMap; }
}
protected override ConfigurationElement CreateNewElement()
{
return new BrowserElement();
}
protected override object GetElementKey(ConfigurationElement element)
{
return ((BrowserElement)element).BrowserName;
}
protected override string ElementName
{
get { return "browser"; }
}
}
public class PlatformElement : ConfigurationElement
{
private string m_platform = "winnt";
[ConfigurationProperty("name", IsKey = true, IsRequired = true)]
public string Name
{
get
{
return Convert.ToString(base["name"]);
}
}
[ConfigurationProperty("browsers", IsDefaultCollection = false)]
public BrowserCollection Browsers
{
get
{
return (BrowserCollection)base["browsers"];
}
}
}
public class PlatformCollection : ConfigurationElementCollection
{
new public PlatformElement this[string name]
{
get
{
if (IndexOf(name) < 0)
return null;
return (PlatformElement)BaseGet(name);
}
}
public PlatformElement this[int index]
{
get
{
return (PlatformElement)BaseGet(index);
}
set
{
if (BaseGet(index) != null)
{
BaseRemoveAt(index);
}
BaseAdd(index, value);
}
}
public int IndexOf(string name)
{
for (int idx = 0; idx < base.Count; idx++)
{
if (this[idx].Name.Trim().Equals(name, StringComparison.CurrentCultureIgnoreCase))
return idx;
}
return -1;
}
public int IndexOf(PlatformElement platform)
{
return BaseIndexOf(platform);
}
public override ConfigurationElementCollectionType CollectionType
{
get
{
return ConfigurationElementCollectionType.BasicMap;
}
}
protected override ConfigurationElement CreateNewElement()
{
return new PlatformElement();
}
protected override Object GetElementKey(ConfigurationElement element)
{
return ((PlatformElement)element).Name;
}
public void Add(PlatformElement platform)
{
BaseAdd(platform);
}
protected override void BaseAdd(ConfigurationElement element)
{
BaseAdd(element, false);
}
public void Remove(PlatformElement platform)
{
if (BaseIndexOf(platform) >= 0)
BaseRemove(platform.Name);
}
public void RemoveAt(int index)
{
BaseRemoveAt(index);
}
public void Remove(string name)
{
BaseRemove(name);
}
public void Clear()
{
BaseClear();
}
protected override string ElementName
{
get { return "platform"; }
}
}
public class BrowserConfiguration : ConfigurationSection
{
private static string m_ConfigurationSectionConst = "BrowserConfiguration";
public static BrowserConfiguration GetConfig()
{
return (BrowserConfiguration)ConfigurationManager.GetSection(BrowserConfiguration.m_ConfigurationSectionConst) ?? new BrowserConfiguration();
}
[ConfigurationCollection(typeof(PlatformCollection), AddItemName = "platform")]
[ConfigurationProperty("platforms", IsDefaultCollection = true)]
public PlatformCollection Platforms
{
get
{
return (PlatformCollection)this["platforms"] ?? new PlatformCollection();
}
}
}
To read Config Section Configuration into Code , Write below Code
var collection = BrowserConfiguration.GetConfig();
PlatformCollection values = collection.Platforms;
int index = values.IndexOf(Request.Browser.Platform);
if (index >= 0)
{
PlatformElement platform = values[index];
int browserindex = platform.Browsers.IndexOf(Request.Browser.Browser);
if (browserindex >= 0)
{
BrowserElement browser = platform.Browsers[browserindex];
if (browser.Version > (Convert.ToDouble(Request.Browser.MajorVersion) + Request.Browser.MinorVersion))
{
Server.Transfer("BrowserCompatible.aspx", false);
}
}
}
No comments:
Post a Comment