I have the following code base:
public abstract class Business
{
    public BusinessType BusinessType { get; set; }
}
public class BusinessA : Business
{
    public string SpecialA { get; set; }
}
public class BusinessB : Business
{
    public string SpecialB { get; set; }
}
A generic interface and classes that are implementing that interface:
public interface IBusinessMapper<T>
{
    void DoMapping(T business);
}
public class BusinessMapperA : IBusinessMapper<BusinessA>
{
    void DoMapping(BusinessA business)
    {
        //...
    }
}
public class BusinessMapperB : IBusinessMapper<BusinessB>
{
    void DoMapping(BusinessB business)
    {
        //...
    }
}
Now I want to create an instance of class BusinessMapperA or BusinessMapperB depending on some value. Is it possible to use something similar to this?:
public class Core
{
    public void Process(Business newBusiness)
    {
        var mapper = GetBusinessMapper(newBusiness.BusinessType);
        mapper.DoMapping();
    }
    private IBusinessMapper<T> GetBusinessMapper(BusinessType businessType)
    {
        switch (businessType)
        {
            case BusinessType.A:
                return new BusinessMapperA();
            case BusinessType.B:
                return new BusinessMapperB();
            default:
                throw new Exception("Not supported");
        }
    }
}
 
     
     
    