Unidad de inyección de dependencia - Resolución condicional

La resolución condicional es lo último que no entiendo en este momento.

Digamos que tenemos una interfazIAuthenticate:

public interface IAuthenticate{
    bool Login(string user, string pass);
}

Ahora tengo dos tipos de autenticación.

Autenticación de Twitter

public class TwitterAuth : IAuthenticate
{
  bool Login(string user, string pass)
{
   //connect to twitter api
}

}

Autenticación de Facebook

public class FacebookAuth: IAuthenticate
{
  bool Login(string user, string pass)
{
   //connect to fb api
}

}

Registro de tipos en unidad config:

unityContainer.RegisterType<IAuthenticate, TwitterAuth>();
unityContainer.RegisterType<IAuthenticate, FacebookAuth>();

inyectar objetos a través de DI en nuestro controlador:

private readonly IAuthenticate _authenticate;

public AuthenticateController(IAuthenticate authenticate)
{
    _authenticate = authenticate;
}



// login with twitter
public virtual ActionResult Twitter(string user, string pass)
{
    bool success =
            _authenticate.Login(user, pass);
}



// login with fb
public virtual ActionResult Facebook(string user, string pass)
{
    bool success =
            _authenticate.Login(user, pass);
}



// login with google
public virtual ActionResult Google(string user, string pass)
{
    bool success =
            _authenticate.Login(user, pass);
}

¿Cómo sabrá exactamente la unidad qué objeto tiene que resolver para los diferentes tipos de autenticación? ¿Cómo hago la resolución condicional en este caso?

Hablé con un amigo mío y me explicó que si esta situación parece ser un diseño incorrecto, pero esto es solo un patrón de fábrica utilizado.

Respuestas a la pregunta(2)

Su respuesta a la pregunta