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、增強了代碼的可維護性和可擴展性,也增強了閱讀性

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM