The following class is a generic object factory. It is used for creating instances of objects from configured or otherwise provided strings.
The “User Guide” is in the comments.
/// <summary>
/// Generic object factory that creates instances of objects from configured or otherwise provided strings.
/// </summary>
public class ObjectFactory
{
/// <summary>
/// Creates an instance of a class from a string "[namespace.[...].className], [component without filname extension],[Version],[Culture],[…]".
/// </summary>
/// <typeparam name="T">The type to create.</typeparam>
/// <param name="configuredClassAndAssembly">Format: [namespace.[...].className], [component without filname extension]</param>
/// <returns>An object of type T.</returns>
/// <remarks>This method uses generics!</remarks>
public static T CreateClassInstance<T>(string configuredClassAndAssembly)
{
//Get type to instanciate
Type tp = Type.GetType(configuredClassAndAssembly, true);
//load assembly
Assembly assembly = Assembly.GetAssembly(tp);
//create class instance
T instance = (T)assembly.CreateInstance(tp.FullName);
//return instance
return instance;
}
}
I am using it to create instances of objects that implement certain interfaces, so that I can swap the implementation, or even mock it, by changing the configuration.
The string that tells which object to create uses the format of the Type.GetType(string) string.
Some error handling should be added.