Currently when I have a class type and need to know if the class can be created. I will call Activator.CreateInstance(type);
and throw away the result.
This seems very inefficient and problematic.
Is there an alternative way to confirm that a class type can be instantiated for the current application?
I need to do this test as part of the application startup. To ensure that any misconfiguration is caught early. If I leave it until an instance of the class is required, then the error could occur when no one is around to fix it.
Here is what I do now.
string className = string.Format("Package.{0}.{1}", pArg1, pArg2);
Type classType = Type.GetType(className);
if (classType == null)
{
throw new Exception(string.Format("Class not found: {0}", className));
}
try
{
// test creating an instance of the class.
Activator.CreateInstance(classType);
}
catch (Exception e)
{
logger.error("Could not create {0} class.", classType);
}
Based on what can be found here, you could test whether the type contains a parameterless constructor (which classes will by default when not provided), and whether the type is not abstract:
if(classType.GetConstructor(Type.EmptyTypes) != null && !classType.IsAbstract)
{
//this type is constructable with default constructor
}
else
{
//no default constructor
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With