'Executing code depending on parameter in controller

So I have this controller code, with dependency injection setup

private IManager manager

public Controller(IManager manager)
{
   this.manager = manager
}

Task async GetAsync(string appId)
{
   await manager.ProcessAsync(appId)
}

Depending on the appid information should be queried from subsystems, so instead of making 1 big manager with a huge switch/case block I would like to create a manager implementation for each subsystem.

What I thought I could do is making an abstract manager class from which the subsystem managers would derive

public interface IManager
{
  Task ProcessAsync(string appId)
}

public abstract class Manager : IManager
{
  public virtual Task ProcessAsync(string appId)
}

public class ManagerA : Manager
{
  public override Task ProcessAsync(string appId)
}

public class ManagerB : Manager
{
  public override Task ProcessAsync(string appId)
}

How can I setup the code (and dependency injection) so my controller calls the right manager depending on the appId parameter? Kind of

Task async GetAsync(string appId)
{
   switch (appId)
   {
      case AppA: 
         managerA.ProcessAsync(appId)
         break;
      case AppB: 
         managerB.ProcessAsync(appId)
         break;
   }      
}


Sources

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

Source: Stack Overflow

Solution Source