Skip to content

Instantly share code, notes, and snippets.

@zoyo23
Last active October 26, 2023 17:59
Show Gist options
  • Save zoyo23/c26ed914b77f3695a99d57895cc0ac14 to your computer and use it in GitHub Desktop.
Save zoyo23/c26ed914b77f3695a99d57895cc0ac14 to your computer and use it in GitHub Desktop.
Dynamic Inject dependency by Key
public class Consumer
{
private readonly IService _aService;
public Consumer(ServiceResolver serviceAccessor)
{
_aService = serviceAccessor("A");
}
public void UseServiceA()
{
_aService.DoTheThing();
}
}
services.AddTransient<ServiceResolver>(serviceProvider => key =>
{
switch (key)
{
case "A":
return serviceProvider.GetService<ServiceA>();
case "B":
return serviceProvider.GetService<ServiceB>();
case "C":
return serviceProvider.GetService<ServiceC>();
default:
throw new KeyNotFoundException();
}
});
public delegate IService ServiceResolver(string key);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment