• autofac 一个接口多个实现的顺序执行


    接口:

    namespace AutofacTest.Interface
    {
        public interface IUserInfo
        {
            string GetUserINfo(int uid);
            int sort();
        }
    }

    接口的实现:

    public class CrmUserInfoHelper : IUserInfo
        {
            public string GetUserINfo(int uid)
            {
                return "crmuserinfo";
            }
    
            public int sort()
            {
                return 2;
            }
        }
    public class HrmUserInfoHelper : IUserInfo
        {
            public string GetUserINfo(int uid)
            {
                return "hrmuserinfo";
            }
    
            public int sort()//实现对多个实现的顺序执行
            {
                return 1;
            }
        }
    var list = AutofacDependencyResolver.Current.GetServices<IUserInfo>();
                foreach (var item in list.OrderBy(x=>x.sort()))
                {
                    item.GetUserINfo(1);
                }

    通过sort()的排序,可以用来确定每个interface实现的执行顺序。

    对于某些应用来说这个可能是比较重要的,比如最终要展示一个model数据,但是是通过各种判断处理后的数据,而且是有先后顺序的,

    我们可以先给一个初始化的model数据,比如需要判断的权限有A,B,C三次,可以抽象一个接口定义两个方法,一个方法实现判断,另一个方法(sort)实现排序,由A,B,C分别来实现接口方法。

    通过autofac取出所有实现此接口的class,通过sort来排序,就可以决定执行顺序了

    这样做的好处:

    1、把各种复杂的判断按照不同的角色进行提取,单一原则

    2、当需要增加新的判断条件时,只要增加新的class就可以,开闭原则

    3、增强了代码的可维护性和可扩展性,也增强了阅读性

  • 相关阅读:
    解读dbcp自动重连那些事
    dbcp重连问题排查
    Redis 历史版本下载URL
    jackson 完整Jar包
    Linux缺少动态连接库.so--cannot open shared object file: No such file or directory
    多模匹配--历程
    利用poi操作word文档
    Java word 内容读取
    光纤存储和服务器架构总结
    FastDFS和集中存储方式对比
  • 原文地址:https://www.cnblogs.com/fuyujian/p/4669010.html
Copyright © 2020-2023  润新知