依赖注入统一 - 条件解析有条件的解决是目前我还不了解的最后一件事。让我们说我们有一个界面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风格)。
- 2 回答
- 0 关注
- 432 浏览
添加回答
举报
0/150
提交
取消