I'm studying up on the unity containers and have a quick question on how to resolve a class's construction to multiple different implementations of an interface.
Here's my code:
public interface IRenderer
{
    void DrawSquare(Square square);
    void DrawCircle(Circle circle);
}
public interface IShape
{
    void Draw(IRenderer renderer);
}
public class Dx11Renderer : IRenderer
{
    public void DrawSquare(Square square)
    {
    }
    public void DrawCircle(Circle circle)
    {
    }
}
public class GlRenderer : IRenderer
{
    public void DrawSquare(Square square)
    {
    }
    public void DrawCircle(Circle circle)
    {
    }
}
public class Circle : IShape
{
    public void Draw(IRenderer renderer) { renderer.DrawCircle(this); }   
}
public class Square
{
    public void Draw(IRenderer renderer) { renderer.DrawSquare(this); }   
}
public class Canvas
{
    private readonly IRenderer _renderer;
    private List<Circle> _circles = new List<Circle>();
    private List<Square> _squares = new List<Square>(); 
    public Canvas(IRenderer renderer)
    {
        _renderer = renderer;
    }
    public void Draw()
    {
        foreach (Circle c in _circles)
        {
            c.Draw(_renderer);
        }
        foreach (Square s in _squares)
        {
            s.Draw(_renderer);
        }
    }
}
and to register/resolve
        // Create the container
        var container = new UnityContainer();
        // registration
        container.RegisterType<IRenderer, GlRenderer>("GL");
        container.RegisterType<IRenderer, Dx11Renderer>("DX11");
        Canvas canvas = container.Resolve<Canvas>("GL");
This throws a "ResolutionFailedException" so I must be using this incorrectly.
Can someone explain if this is bad practice, or how I can achieve this.
Thanks
UPDATE:
So what I have done is registered Canvas twice with each type of dependencies like so:
// Canvas with an OpenGL Renderer
container.RegisterType<Canvas>("GLCanvas", new InjectionConstructor(new ResolvedParameter<IRenderer>("GL")));
// Canvas with a DirectX Renderer
container.RegisterType<Canvas>("DXCanvas", new InjectionConstructor(new ResolvedParameter<IRenderer>("DX11")));
Canvas canvas = container.Resolve<Canvas>("GLCanvas");
This works well for me!