Oroboros and TheRing :: Provider madness
//I don't normaly write code like this, but hey I needed some levity.
/*
<configSections>
<section name="Oroboros"
type="Oroboros,ProviderSamples"/>
</configSections>
<Oroboros type="Oroboros, ProviderSamples">
<Tail>TheRing, ProviderSamples</Tail>
</Oroboros>
Oroboros wurm = Oroboros.New();
Response.Write(wurm.Name);
Response.Write("<HR>");
Oroboros ring = TheRing.New();
Response.Write(ring.Name);
Response.Write("<HR>");
*/
using System;
public class TheRing : Oroboros
{
public TheRing(Oroboros oroboros): base(oroboros){}
new static public TheRing New()
{
return Oroboros.New() as TheRing;
}
}
public class Oroboros : System.Configuration.IConfigurationSectionHandler
{
string _tail;
public Oroboros(){}
public Oroboros(Oroboros oroboros){}
public static Oroboros New()
{
Oroboros config = System.Configuration.ConfigurationSettings.GetConfig("Oroboros") as Oroboros;
return Type.GetType(config.Tail).GetConstructor(new Type[1]{typeof(Oroboros)}).Invoke(new object[1]{config}) as Oroboros;
}
public string Tail
{
get
{
return _tail;
}
set
{
_tail = value;
}
}
public virtual string Name
{
get
{
return this.GetType().Name;
}
}
public object Create(object parent,object configContext,System.Xml.XmlNode section)
{
return new System.Xml.Serialization.XmlSerializer (Type.GetType ( section.Attributes["type"].Value )).Deserialize( new System.Xml.XmlNodeReader (section));
}
}