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