記得在古老的 2.0 時代,如果想要不重新編譯動態更改邏輯,有兩種方式:第一種是插件式編程,第二種是使用 System.CodeDom.Compiler 空間下的動態編譯功能。兩種思路的核心思路差不多,都是實現接口,進而創建實例操作的。或許,還有第三種方式,恕我孤陋寡聞。
然而,時代在進步,總會出現一些新的技術替換。在進入 3.0 之后,Lambda 表達式的出現,給我們一些新的思路,我們應該可以將這樣的字符串【p => p.FirstName + p.LastName】轉換為 Lambda 表達式樹或者其編譯后的委托,算是第二種方式的一種進階吧。這恰恰是我在接下來的一系列的文章中,將要展示給大家的東西,希望大家能喜歡。
在這第一篇文章中,我說下思路吧。
- 分析字符串【p => p.FirstName + p.LastName】並轉換為一組 symbol 集合。
- 傳遞目標 LambdaExpression 包含的委托類型到分析類中。
- 根據 LambdaExpression 規則遞歸分析集合中的每一個 symbol 。
- 返回分析得到的 LambdaExpression 表達式或編譯后的委托。
這樣,你就可以根據委托這種后綁定的數據形式,做任何你想要的事情了。關於第一種的插件式編程,在完成了這個系列之后,我會共享一個高效、輕量的 DI 類庫,和這個系列組合起來,形成一個真正可用的微型框架。在這里先吊吊大家的胃口,希望不要噴我才好。敬禮,呵呵。