在WebApi 中使用AutoFac (二)

WebApi 中使用AutoFac  (一)

前篇说了怎么使用AutoFac,但是还存在一个问题,就是一个接口多个实现类的时候,怎么区分实现类?

解决办法有很多,有 Named<T>等等,但是都需要去分别单独注册,少的话可以,多了就有点儿麻烦了。

最后决定利用泛型解决该问题。

第一步:新增一个实现类:UsersRepository2

public interface IUsersRepository    {        int GetUserIsExists(UsersEntity criteria);    }    //实现类1    public class UsersRepository : IUsersRepository    {        Logger log = LogManager.GetLogger("UsersRepository");        /// <summary>        /// 获取用户是否存在        /// </summary>        /// <param name="criteria"></param>        /// <returns></returns>        public int GetUserIsExists(UsersEntity criteria)        {            string sql = "。。。。";            。。。。。        }    }    //实现类2    public class UsersRepository2 : IUsersRepository    {        Logger log = LogManager.GetLogger("UsersRepository2");        /// <summary>        /// 获取用户是否存在        /// </summary>        /// <param name="criteria"></param>        /// <returns></returns>        public int GetUserIsExists(UsersEntity criteria)        {            string sql = "。。。。";            。。。。。        }    }

第二步:调整服务接口和实现类

1     public enum UsersType 2     { 3         /// <summary> 4         /// 实现类1 5         /// </summary> 6         [Description("实现类1")] 7         UsersRepository = 1, 8         /// <summary> 9         /// 实现类210         /// </summary>11         [Description("实现类2")]           UsersRepository2 = 2,12       }13 14     //调整服务接口  15     public interface IUsersService16     {17         int GetUserIsExists<T>(T t, UsersEntity criteria);   //这里改为泛型方法18     }19 20     //调整实现类21     public class UsersService : IUsersService22     {23         //这里改为使用 IEnumerable<T>类型24         private readonly IEnumerable<IUsersRepository> _usersrepository;25         public UsersService(IEnumerable<IUsersRepository> usersrepository)26         {27             _usersrepository = usersrepository;28         }29 30         /// <summary>31         /// 获取用户是否存在32         /// </summary>33         /// <param name="criteria"></param>34         /// <returns></returns>35         public int GetUserIsExists<T>(T t, UsersEntity criteria)36         {37             //根据泛型T 获取想要的实例对象38             var getinstance = _usersrepository.Where(ob => ob.GetType().Name == t.ToString()).FirstOrDefault();  //获取指定实例39             if (getinstance != null)40             {41                 return getinstance.GetUserIsExists(criteria);42             }43             return 0;44         }45     }

第三步:测试

1     public class UsersController : ApiController 2     { 3         private readonly IUsersService _usersService; 4         public UsersController(IUsersService usersService) 5         { 6             _usersService = usersService; 7         } 8  9 10         /// <summary>11         /// 获取用户是否存在12         /// </summary>13         /// <param name="username"></param>14         /// <param name="password"></param>15         /// <returns></returns>16         [HttpPost]17         public IHttpActionResult GetUserIsExists(string username, string password)18         {19             //验证是否存在当前用户20             var obModel = new UsersEntity()21             {22                 Username = username,23                 Password = Encryption.MD5(password)24             };25 26             //这里调用时,传入枚举:UsersType.UsersRepository 或 UsersType.UsersRepository227             var getresult = _usersService.GetUserIsExists(UsersType.UsersRepository, obModel);28 29             return Json(new { isexists = getresult > 0 });30         }31 32 33     }

我们分别把两个实现类都打上断点,

当传 UsersType.UsersRepository 时,UsersRepository类的断点进来了,

当传 UsersType.UsersRepository2 时,UsersRepository2类的断点进来了,

当然,这里是分开执行实现类的,如果你想执行全部的实现类,只需要把服务类里边的泛型筛选去掉就行了

例如:

1     public class UsersService : IUsersService 2     { 3         //这里改为使用 IEnumerable<T>类型 4         private readonly IEnumerable<IUsersRepository> _usersrepository; 5         public UsersService(IEnumerable<IUsersRepository> usersrepository) 6         { 7             _usersrepository = usersrepository; 8         } 9 10         /// <summary>11         /// 获取用户是否存在12         /// </summary>13         /// <param name="criteria"></param>14         /// <returns></returns>15         public int GetUserIsExists<T>(T t, UsersEntity criteria)16         {17             //根据泛型T 获取想要的实例对象18             //var getinstance = _usersrepository.Where(ob => ob.GetType().Name == t.ToString()).FirstOrDefault();  //获取指定实例19             //if (getinstance != null)20             //{21             //    return getinstance.GetUserIsExists(criteria);22             //}23 24             //这里调整代码为 执行全部的实现类25             var getresult = 0;26             _usersrepository.ToList().ForEach(item =>27             {28                 var gettype = item.GetType().Name;29                 switch (gettype)30                 {31                     case "UsersRepository":32                         //其他业务逻辑33                         getresult = item.GetUserIsExists(criteria);34                         break;35                     //case 2 .....36                     //case 3 .....37                     default:38                         break;39                 }40             });41             return 0;42         }43     }

结束。

(0)

相关推荐

  • TkMybatis常用方法

    TkMybatis常用方法

  • 人生中心情驿站二十二(之十二)

    徜徉在知识的海洋而不觉得自己渺小  劈波于历史的长河贯看天地秋月春风 --------中国摄像师潘长宏题 心情驿站之十二 1.一切一切都在变,只有人性没有变. 2.家庭教育决定了一个人的基本修养. 3 ...

  • 人生中心情驿站二十二(之十一)

    徜徉在知识的海洋而不觉得自己渺小  劈波于历史的长河贯看天地秋月春风 --------中国摄像师潘长宏题 心情驿站之十一 奋斗是一种乐趣,追求是一种动力,助人是一种储蓄,吃亏是一种积累, 谦和是一种修 ...

  • 人生中心情驿站二十二(之十三)

    徜徉在知识的海洋而不觉得自己渺小  劈波于历史的长河贯看天地秋月春风 --------中国摄像师潘长宏题 心情驿站之十二 1.核桃:没有华丽的外表,却有充实的大脑.     2..指南针:思想稳定,东 ...

  • 人生中心情驿站二十二(之十)

    徜徉在知识的海洋而不觉得自己渺小 劈波于历史的长河贯看天地秋月春风 --------中国摄像师潘长宏题 心情驿站之十 37.我愿化身一座石桥,经受五百年风吹,五百年日晒,五百年雨打,只求你从桥上走过. ...

  • 人生中心情驿站二十二(之十四)

    徜徉在知识的海洋而不觉得自己渺小  劈波于历史的长河贯看天地秋月春风 --------中国摄像师潘长宏题 心情驿站之十四 1.因为电话,信笺少了:因为时尚,布料少了:因为空调,汗水少了:因为应酬,亲情 ...

  • 人生中心情驿站二十二(之十五)

    徜徉在知识的海洋而不觉得自己渺小  劈波于历史的长河贯看天地秋月春风 --------中国摄像师潘长宏题 心情驿站之十五 1.超过别人一点点,别人就会嫉妒你:超过别人一大截,别人就会羡慕你. 2.全部 ...

  • 档案《李宗盛 那些歌中的爱 歌中的情(二)》

    档案《李宗盛 那些歌中的爱 歌中的情(二)》

  • 人生中心情驿站二十二(之九)

    徜徉在知识的海洋而不觉得自己渺小  劈波于历史的长河贯看天地秋月春风 --------中国摄像师潘长宏题 心情驿站之九 19.一个人的个人能力再强也无法战胜一个团队. 20.你的丑和你的脸没有关系. ...

  • 人生中心情驿站二十二(之八)

    徜徉在知识的海洋而不觉得自己渺小  劈波于历史的长河贯看天地秋月春风 --------中国摄像师潘长宏题 心情驿站之八 1.我们在梦里走了许多路,醒来后发现自己还在床上. 2.变老并不等于成熟,真正的 ...