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.