Temat: Klasa bazowa dla singletona w C#
Propnowałbym zrobić prostą fabrykę dla obiektów. Zrobiłbym prosty atrybut dla klas np. SingletonAttribute a potem taką fabrykę:
public class SingletonFactory
{
private Hashtable instances = new Hashtable();
private static readonly SingletonFactory instance = new SingletonFactory();
private SingletonFactory()
{
}
public T GetObjectInstance<T>() where T : class
{
Type type = typeof(T);
if(type.GetCustomAttributes(typeof(SingletonAttribute), true).Length > 0)
{
Object o = instances[type];
if(o != null)
{
return o as T;
}
else
{
T instance = type.InvokeMember(type.Name,
BindingFlags.CreateInstance |
BindingFlags.Instance |
BindingFlags.NonPublic,
null, null, null) as T;
instances.Add(type, instance);
return instance;
}
}
else
{
return Activator.CreateInstance<T>();
}
}
public static SingletonFactory Instance
{
get
{
return instance;
}
}
}
Klasy które będa tworzone jako singletony mogą mieć prywatny konstruktor.
Sebastian H. edytował(a) ten post dnia 01.09.08 o godzinie 11:24