'Resolving Dependencies based on request in Servicestack

I have a Servicestack Api and i need suggestions \ ideas in injection the dependencies.

My Api needs to call appropriate dependency based on the request parameters

I have registered the dependencies as below


    public class AppHost : AppHostBase
    {
        //default code
    
        public override void Configure(Container container)
        {
            container.Register<ITravelManager>("Air", new AirTravelManager());
            container.Register<ITravelManager>("Road", new RoadTravelManager());
        }
    }

The service looks as :

public class TravelService:Service
{
    private readonly ITravelManager traveleManager;

    public TravelService(ILogService logService) 
    {
        
    }
    
    public TravelByAir Post(TravelByAirReq request)
    {
        traveleManager= ServiceStackHost.Instance.Container.ResolveNamed<ITravelManager >("Air");
        traveleManager.BooKTickets();
    }
    
    public TravelByRoad Post(TravelByRoadReq request)
    {
        traveleManager= ServiceStackHost.Instance.Container.ResolveNamed<ITravelManager >("Road");
        traveleManager.BooKTickets()
    }
}

My manager class looks as

public interface ITravelServiceManager 
{
     Tickets BooKTickets();
}
public class AirTravelManager
{
     Tickets BooKTickets()
     {
          ....
     }
}
public class SeaTravelManager
{
     Tickets BooKTickets()
     {
          ....
     }
}

Resolving traveleManager this way , looks like anti-pattern. Is there better approach \ pattern to resolve traveleManager with out using service locator.



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source