IKende.CLI是一款開源的命令行分解組件,它能夠簡地把命令行字符轉換成命令對象。在編寫CLI應用的時候常常要對命令字符進行繁鎖的分解和轉換工做,而IKende.CLI的存也是爲了解決以上問題而產生;經過特性的描述來簡化命令分析工做,從而讓在編寫CLI的時候制定命令變得更方便簡單。下面簡單地講解組件的使用git
在使用前先了解一下組件的結構github
Parse是組件的切入點,也是使用的主要對象。他依據兩個對象來對數據進行分析處理分別是ILineAnalyzer和CommandBuilder.數據結構
ILineAnalyzerui
接口主要描述對命令行字符進行分析並返回一個統一的數據結構,組件提供一個默認實現;因爲使用習慣的問題也能夠制其餘命令分解方式。spa
CommandBuilder 命令行
對象的主要做用是根據ILineAnalyzer結構綁定到對象中,經過CommandAttribute和ArgumentAttribute兩個特性來描述對象及其屬性和命令字符的對應關係。整個組件的設計都比較簡單,還有兩個接口ICommand和IConvert就不做詳細介紹了分別的命令定義規則和參數轉換規則的定義。設計
組件默認分析器命令屬性是以[-字母]來描述一個命令屬性,而後空格跟隨就是屬性的內容如:對象
login -h host -p port -u userName -w password
以上是一個簡單地登錄指令,分別有主機名,端口,用戶名和密碼等信息。針對以上字符命令制定的命令對象以下:blog
[Command("login")] public class Login : CommandBase { [Argument("h", "-h Host", Regex = @"^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)+([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])$")] public string Host { get; set; } [Argument("p", "-p Port", DefaultValue = "8088", Regex = @"^\d{4,5}$")] public int Port { get; set; } [Argument("u", "-u userName")] public string UserName { get; set; } [Argument("w", "-w passWord")] public string Pwd { get; set; } }
因爲有些屬性的數據是規範的,因此能夠經過Argument特性的Regex屬性來制定一個數據約束規範;特性一樣也提供DefaultValue來描述一個屬性的默認值,若是在編寫命令時沒有指定該屬性值則使用默認值。接口
命令定義好後只須要使用Parse對象對輸入的字符命令分析便可。
Parse<LineAnalyzer> mParse = new Parse<LineAnalyzer>(); mParse.LoadAssembly(typeof(Login).Assembly);//or mParse.Load<Login>(); string line="login -h www.ikende.com -u henry -w 123456"; ParseResult presult = mParse.Execute(line); if (string.IsNullOrEmpty(presult.Error)) { //presult.Command }
在定義Parse對象的時候而要指定LineAnalyzer分析器,分析器類型的指定則根據實際應用的需求。Parse定義完成後須要加載相應的命令信息,類提供了兩個方法Load和LoadAssembly分別用於加載單個對象或某程序集下面的全部命令對象。最後經過執行Execute方法獲得具體ParseRresult對象,在分析過程有可能存在邏輯上的錯誤,經過ParseResult.Error屬性能夠獲得具體邏輯錯誤信息。