猿问

依赖注入统一 - 条件解析

依赖注入统一 - 条件解析

有条件的解决是目前我还不了解的最后一件事。

让我们说我们有一个界面IAuthenticate

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

现在我有两种类型的身份验证。

Twitter认证

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

Facebook Auth

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

在unity配置中注册类型:

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

在我们的控制器中通过DI注入对象:

private readonly IAuthenticate _authenticate;public AuthenticateController(IAuthenticate authenticate){
    _authenticate = authenticate;}// login with twitterpublic virtual ActionResult Twitter(string user, string pass){
    bool success =
            _authenticate.Login(user, pass);}// login with fbpublic virtual ActionResult Facebook(string user, string pass){
    bool success =
            _authenticate.Login(user, pass);}// login with googlepublic virtual ActionResult Google(string user, string pass){
    bool success =
            _authenticate.Login(user, pass);}

团结如何知道它必须为不同类型的身份验证解决哪个对象?在这种情况下如何进行条件解决?

我和我的朋友谈过,他解释说如果这种情况出现是错误的设计,但这只是工厂模式使用的。


12345678_0001
浏览 433回答 2
2回答

杨__羊羊

团结不会没有你的帮助。您可以在注册IAuthenticate类型时提供名称:unityContainer.RegisterType<IAuthenticate,&nbsp;TwitterAuth>("Twitter");unityContainer.RegisterType<IAuthenticate,&nbsp;FacebookAuth>("Facebook");您将不再希望将IAuthenticate实例直接注入AuthenticateController。您将根据一致的条件(服务定位器样式)获得所需的实例:myContainer.Resolve<IAuthenticate>("Twitter");或者你会注入一个为你做这个的工厂(如果你喜欢严格的DI风格)。
随时随地看视频慕课网APP
我要回答