If you want having Get
works with a string you have two options:
Add a non generic Get
taking a Type as a paremter, something like:
public object Get(Type t)
;
so you can pass a type created form a string.
A second option could be reflection:
MethodInfo method = typeof(YourType).GetMethod("Get");
MethodInfo generic = method.MakeGenericMethod(myType);
then you can invoke generic as if it was closed on to the type myType.
If I can suggest which one to use, and if you can refactor the Get
method, I would suggest adding a non generic version of that method. The reflection version works if you really can't modify the library code. The drawback in using reflection is performance as you probably guess: you can decide if you can stay with it or not.
EDIT
Of course, my discussion does not apply if your method is really just creating the final object:
In this case activator works as a charm by passing the complete type name:
Activator.CreateInstance(Type.GetType("yourtypename"));
You generally can create the type based on just the simple name ( Car,Bus, etc ) because you need to fully qualify with a namespace and an assebly if the type is not the ExecutingAssembly. In this case you have to use some convention/configuration to simplify the code readability.
ADDITION
If you need to pass parameters too, I think you can try to start using a simple IoC ( I would not recomend one in particular, choose one widely used you like ) that can solve all these issues for you.