接口:

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

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

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

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

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

这样做的好处:

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

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

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

autofac 一个接口多个实现的顺序执行的更多相关文章

  1. Autofac在项目中应用的体会,一个接口多个实现的情况

    在本人接触的项目中Autofac应用的比较多一些,我理解的他的工作原理就是  注册类并映射到接口,通过注入后返回相应实例化的类! 下面说说我在项目中的实际应用 先来简单介绍下Autofac的使用 1. ...

  2. 在.NET Core中处理一个接口多个不同实现的依赖注入问题

    前言 近段时间在准备公司的技术分享,所以这段时间将大部分时间放在准备分享内容上去了.博客也就停了一下下. 在.NET Core中处理依赖注入问题时,往往是定义好了一个操作规范的接口,会有N多个基于不同 ...

  3. [implements] - 一个接口的使用

    4种货物,如何使用一个接口实现CRUD: package com.tansuo365.test1.service.goods; import com.tansuo365.test1.entity.Go ...

  4. Swift处理堆栈问题——给定两组序列,其中一个序列表示栈的push 顺序,判断另一个序列有没有可能是对应的pop 顺序

    题目:输入两个整数序列.其中一个序列表示栈的push 顺序,判断另一个序列有没有可能是对应的pop 顺序.为了简单起见,我们假设push 序列的任意两个整数都是不相等的.比如输入的push 序列是1. ...

  5. 35.按要求编写Java程序: (1)编写一个接口:InterfaceA,只含有一个方法int method(int n); (2)编写一个类:ClassA来实现接口InterfaceA,实现int method(int n)接口方 法时,要求计算1到n的和; (3)编写另一个类:ClassB来实现接口InterfaceA,实现int method(int n)接口 方法时,要求计算n的阶乘(n

      35.按要求编写Java程序: (1)编写一个接口:InterfaceA,只含有一个方法int method(int n): (2)编写一个类:ClassA来实现接口InterfaceA,实现in ...

  6. 为什么不能把委托(delegate)放在一个接口(interface)当中?

    stackoverflow上有人问,为什么不能把委托放在一个接口当中? 投票最多的第一个答案第一句话说,“A Delegate is just another type, so you don't g ...

  7. Delphi 提示在Delphi的IDE中,按Ctrl+Shift+G键可以为一个接口生成一个新的GUID。

    对于Object Pascal语言来说,最近一段时间最有意义的改进就是从Delphi3开始支持接口(interface),接口定义了能够与一个对象进行交互操作的一组过程和函数.对一个接口进行定义包含两 ...

  8. spring容器注入一个接口的两个实现类

    spring容器中能拥有两个同种类型的bean吗?我有两个dao类同时实现一个接口,这两个接口注入时报了异常如下. org.springframework.beans.factory.NoSuchBe ...

  9. 一个APP页面一个接口

    目前所在的公司做的是健康产业方面的APP,这个产品包括了安卓和IOS还有web三方面,除了要写后台管理的系统外,还要写移动端的接口.第一次写移动端接口就犯了一个错误,以为和web一样是怎么方便怎么来, ...

随机推荐

  1. JavaScript之入门篇(二)

    终于学到后面的语法部分了,感觉这门语言基础部分和当初学习VB的时候感觉一样一样的,章节目录让我不禁又想到了VB课本.由于怕学过了,过段时间忘了,于是,大概总结一下. 数据类型部分 ① Typeof操作 ...

  2. 资深专家深度剖析Kubernetes API Server第3章(共3章)

    在本系列的前两部分中我们介绍了API Server的总体流程,以及API对象如何存储到etcd中.在本文中我们将探讨如何扩展API资源. 在一开始的时候,扩展API资源的唯一方法是扩展相关API源代码 ...

  3. P3167 [CQOI2014]通配符匹配 题解

    题目 题目大意 给出一个字符串,其中包含两种通配符 ‘?’和 ‘*’ ,‘?’可以代替一个字符,‘*’可以代替一个字符串(长度可以为0) 然后给出几个字符转,判断能否用给出的字符串表示出来 样例解释 ...

  4. angularJs增加行的操作

    <!-- 编辑窗口 --> <div class="modal fade" id="editModal" tabindex="-1& ...

  5. 雷林鹏分享:jQuery EasyUI 数据网格 - 添加查询功能

    jQuery EasyUI 数据网格 - 添加查询功能 本实例演示如何从数据库得到数据,并将它们显示在数据网格(datagrid)中.然后演示如何根据用户输入的搜索关键词搜寻显示结果. 创建数据网格( ...

  6. 异步解决方案(三)Promise

    首先建议大家先看看这篇博文,这是我看过的最清晰给力的博文了: https://www.cnblogs.com/lvdabao/p/es6-promise-1.html 附赠一篇笑死我了的博客,加入有一 ...

  7. 图片滚动插件jquery bxslider

    https://www.cnblogs.com/axl234/p/4167196.html

  8. Linq 查询内建议不要使用运算语句!

    比如list有2个值,当你运行完上述代码后,你会发现,你的ls中的Num没有按你预期的那样从0开始,导致这个问题的原因是:在你查询完毕后,执行的Count()方法,会导致查询语句中Num=num++再 ...

  9. Applese 的毒气炸弹(最小生成树)

    链接:https://ac.nowcoder.com/acm/contest/330/G 来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语言5242 ...

  10. Life is a journey

    Life is a journey. What we should care about is not where it's headed but what we see and how we fee ...