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

复制代码
public interface IUsersRepository
{
int GetUserIsExists(UsersEntity criteria);

}

//实现类1
public class UsersRepository : IUsersRepository
{
    Logger log = LogManager.GetLogger("UsersRepository");

    /// 
    /// 获取用户是否存在
    /// 
    /// 
    /// 
    public int GetUserIsExists(UsersEntity criteria)
    {
        string sql = "。。。。";
        。。。。。
    }
}

//实现类2
public class UsersRepository2 : IUsersRepository
{
    Logger log = LogManager.GetLogger("UsersRepository2");

    /// 
    /// 获取用户是否存在
    /// 
    /// 
    /// 
    public int GetUserIsExists(UsersEntity criteria)
    {
        string sql = "。。。。";
        。。。。。
    }
}

复制代码
第二步:调整服务接口和实现类

复制代码
1 public enum UsersType
2 {
3 ///


4 /// 实现类1
5 ///

6 [Description("实现类1")]
7 UsersRepository = 1,
8 ///
9 /// 实现类2
10 ///

11 [Description("实现类2")]
UsersRepository2 = 2,
12 }
13
14 //调整服务接口
15 public interface IUsersService
16 {
17 int GetUserIsExists(T t, UsersEntity criteria); //这里改为泛型方法
18 }
19
20 //调整实现类
21 public class UsersService : IUsersService
22 {
23 //这里改为使用 IEnumerable类型
24 private readonly IEnumerable _usersrepository;
25 public UsersService(IEnumerable usersrepository)
26 {
27 _usersrepository = usersrepository;
28 }
29
30 ///
31 /// 获取用户是否存在
32 ///

33 ///
34 ///
35 public int GetUserIsExists(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 ///


11 /// 获取用户是否存在
12 ///

13 ///
14 ///
15 ///
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.UsersRepository2
27 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类型
4 private readonly IEnumerable _usersrepository;
5 public UsersService(IEnumerable usersrepository)
6 {
7 _usersrepository = usersrepository;
8 }
9
10 ///


11 /// 获取用户是否存在
12 ///

13 ///
14 ///
15 public int GetUserIsExists(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 }