为了账号安全,请及时绑定邮箱和手机立即绑定

依赖注入统一 - 条件解析

依赖注入统一 - 条件解析

C#
12345678_0001 2019-08-27 18:00:17
依赖注入统一 - 条件解析有条件的解决是目前我还不了解的最后一件事。让我们说我们有一个界面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 Authpublic 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);}团结如何知道它必须为不同类型的身份验证解决哪个对象?在这种情况下如何进行条件解决?我和我的朋友谈过,他解释说如果这种情况出现是错误的设计,但这只是工厂模式使用的。
查看完整描述

2 回答

?
杨__羊羊

TA贡献1943条经验 获得超7个赞

团结不会没有你的帮助。您可以在注册IAuthenticate类型时提供名称:

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

您将不再希望将IAuthenticate实例直接注入AuthenticateController。您将根据一致的条件(服务定位器样式)获得所需的实例:

myContainer.Resolve<IAuthenticate>("Twitter");

或者你会注入一个为你做这个的工厂(如果你喜欢严格的DI风格)。


查看完整回答
反对 回复 2019-08-27
  • 2 回答
  • 0 关注
  • 432 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信