zoukankan      html  css  js  c++  java
  • 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、增强了代码的可维护性和可扩展性,也增强了阅读性

  • 相关阅读:
    云虚拟化
    yum puppet 并整合控制台
    Centos6.4 openNebula
    ubuntu Server LAmp环境
    openSuSE12.1 zypper LAMP
    yum puppet
    NYOJ 257 郁闷的C小加(一)
    JAVA_SE基础——17.方法的重载
    poj 1390 Blocks (经典区间dp 方块消除)
    HBase数据同步到ElasticSearch的方案
  • 原文地址:https://www.cnblogs.com/fuyujian/p/4669010.html
Copyright © 2011-2022 走看看