mardi 2 mai 2017

C# Best approach to instantiate object based on string

I'd like to discuss about the best approach (in C#) to instantiate an object based on an input string. Let me explain. Let'say I have a base class:

public abstract class BaseCar 
{
    public asbtract int GetEngineID();
    //Other stuff...
}

Then I have several implementations of this class, let's say:

public class SportCar : BaseCar
{
    public override int GetEngine
    { 
      //Specific implementation
    }

}

public class OtherCar: BaseCar
{
    public override int GetEngine
    { 
      //Specific implementation
    }

}

And so on...

What I'd like to do is to make a static CarFactory class which has a CreateCar method which accepts a string as a parameter and returns a BaseCar instance, depending on what string you give. The string would be a name of a child class.

For example, if I call CarFactory.CreateCar('SportCar') it should return a SportCar instance.

I know I could use a simple switch statement to check which car has been requested and create a new instance based on that but I don't like this approach for two reasons:

  • I plan to have a lot of child classes, hard-coding every case wouldn't be too easy to mantain
  • I plan to implement an inizialization procedure to also give some initial values to the objects I create (using Reflection), so mixing hard-coding and reflection doesn't seem to be a good idea for me.

What I was thinking about is to use the Assembly.CreateInstance from System.Reflection to create an instance of the specified class but since this is the first time I approach this problem, I don't know if there are better ways to do that. Is this a valid approach ?

Considering the input string will come from an XML file, is there a simplier method ? Maybe my issue is already handled in some .NET Assembly which I'm missing.





Aucun commentaire:

Enregistrer un commentaire