No, this is not a question about generics.
I have a Factory pattern with several classes with internal constructors (I don\'t want them being instantiated if not thr
besides Activator.CreateInstance(typeof(T), true) to work, T should have default constructor
To get around this, couldnt you just alter your usage as such:
public class GenericFactory<T> where T : MyAbstractType
{
public static T GetInstance()
{
return Activator.CreateInstance(typeof(T), true);
}
}
Your factory method will still be generic, but the call to the activator will not use the generic overload. But you should still achieve the same results.
If you absolutely require that the constructor be private you can try something like this:
public abstract class GenericFactory<T> where T : MyAbstractType
{
public static T GetInstance()
{
return (T)Activator.CreateInstance(typeof(T), true);
}
}
Otherwise you're best off adding the new constraint and going that route:
public abstract class GenericFactory<T> where T : MyAbstractType, new()
{
public static T GetInstance()
{
return new T;
}
}
You're trying to use GenericFactory as a base class for all of your factories rather than writing each from scratch right?