日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Natasha v2.5.4 版与运行时实战

發(fā)布時間:2023/12/4 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Natasha v2.5.4 版与运行时实战 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章轉(zhuǎn)載授權(quán)級別:B

Natasha 是一個十分便捷的動態(tài)構(gòu)建庫,支持.NET Standard2.0 / Core3.0+ ; 比起繁雜的 IL 指令和 Expression 的眾多 API , ?Natasha 的構(gòu)建方式更加友好簡潔,?基于 Natasha 可以讓動態(tài)工作變得傻瓜,簡單,讓開發(fā)者更加專注動態(tài)代碼的邏輯。?在上一篇動態(tài)查找樹的文章中,我們使用算法結(jié)合 Natasha 將字典的性能提升了一倍且支持并發(fā),在性能優(yōu)化上面取得了比較顯著的成效。

下面將寫一些入門的操作,希望更多的開發(fā)者能參與進來,一起提升和體驗 Natasha (項目地址:https://github.com/dotnetcore/Natasha);

場景1:在程序運行時,通過外面?zhèn)鱽淼淖址?#xff0c;創(chuàng)建一個委托,并且可以回收。

string?input = @"return arg1+arg2;";
//先創(chuàng)建域再創(chuàng)建委托var?func?=?NDomain????????????.Create("MyDomain")???//域名為MyDomain的獨立域 .Func<string, string,?string>(input);var?result?=?func("Hello","?World!");//result: Hello World!
//卸載獨立域 - 回收func.Delete();

場景2:在程序運行時,通過字符串創(chuàng)建一個類/結(jié)構(gòu)體/枚舉/接口。

//在名為?MyDomain?的獨立域內(nèi)創(chuàng)建一個類型var type = NDomain.Create("MyDomain").GetType(????????????????@"public?class/struct/enum/interface??DomainTest1{ public string Name; public DomainOperator Operator;????????????????}");????????????????//卸載獨立域 - 回收??????????????type.Delete();

場景3:測試一個復(fù)雜的應(yīng)用場景。

步驟:

??? 1、在系統(tǒng)域內(nèi)創(chuàng)建一個類A,包括一個靜態(tài)方法 B。

??? 2、在 B 方法中實現(xiàn) try/catch。

??? 3、在 B 方法中調(diào)用 SqlConnection/Json.net 等依賴庫操作。

??? 4、在 B 方法中調(diào)用當前不同命名空間的類。

??? 5、返回一個結(jié)果。

? ? 6、在獨立域創(chuàng)建一個靜態(tài)類及方法,并返回剛才創(chuàng)建的系統(tǒng)域的 A.B 方法。


?var?type?=?NClass.Create()??//Create參數(shù)為空時,使用系統(tǒng)域? .Public .Namespace("OperatorOverride")?????????????.OopName("Test1")???//類名為Test1 .OopBody(@" public static string GetTest(){ try { System.Data.SqlClient.SqlConnection client = new System.Data.SqlClient.SqlConnection(); client.Open(); SqlCommand cmd = client.CreateCommand(); SqlDataReader read = cmd.ExecuteReader();????????????????return?""succeed!""; } catch (Exception ex) { Test2 test = new Test2(); test.Error = new Model2.Test3(); test.Error.Name = ex.Message;?????????????????return?JsonConvert.SerializeObject(test);
????????????}}")????????????.GetType();
//在隨機域中返回剛剛創(chuàng)建的方法var?func =?NDomain.Random()???????????.Func<Func<string>>("return?Test1.GetTest;")
var?GetTest?=?func();Console.WriteLine(GetTest());
//結(jié)果:{"Error":{"Name":"The ConnectionString property has not been initialized."}}

場景4:針對 TryHandler類?構(gòu)建一個可以自定義的處理流程,我們項目的需求變更十分頻繁,在需求穩(wěn)定之前我們不得不進行大量的調(diào)試和試錯,希望有這么一個系統(tǒng)能再不重啟的情況下支持我們折騰。

控制約束類:

public?static class TryHandler<T>{
??//獲取產(chǎn)品??public?static?Func<T, Product>?GetProductEntity;??//寫入數(shù)據(jù)庫??public?static Func<Product, bool>?WriteProduct;??//日志放到隊列里??public?static?Func<bool, Product, bool>?SendLogToQueue;??//這里是入口??public?static?Func<T, bool>?Hanlder;
}

腳本擴展類:

public?static?class?ScriptHandler{??//使用Natasha將字符串轉(zhuǎn)換為可執(zhí)行代碼??public?static?void?Handler(string str)??{??????var?action = NDomain.Random().Action(str);??????action();??}
}

準備好寫在外面需要傳入的腳本,這里用 txt 文件代替,如圖:

如果看不清圖:主要的輸出是將產(chǎn)品序列化到 1.txt 中,并在屏幕上打印?成功或者失敗。

在入口函數(shù):

foreach (var item in files){????//讀腳本并讓其生效????ScriptHandler.Handler(File.ReadAllText(item));}
Apple apple = new Apple();apple.AppleId = 10;apple.AppleName = "蘋果";
TryHandler<Apple>.Hanlder(apple);

執(zhí)行結(jié)果:

{"Id":10,"Name":"蘋果"}

最新版 Natasha 有了什么變化:

Natasha 所有 API 將以域為首要條件,如果使用 FastMethod / FakeMethod / Oop 等 Operator 時將默認提供三種靜態(tài)實例方法:Create / Random 方便用戶創(chuàng)建域 / 使用系統(tǒng)域?/?使用隨機域等。

Natahsha 最新版支持命名空間引用的覆蓋,增加了 CS0104 / CS0234 / CS0246 等問題處理方案,在出現(xiàn)二義性引用時優(yōu)先使用開發(fā)者傳入 Using 的命名空間,針對命名空間無效的情況,Natasha 將在第一次編譯時進行過濾移除并進行第二次編譯,命名空間的處理對開發(fā)者盡可能透明。


https://github.com/dotnetcore

打賞一杯酒,削減三分愁。
跟著我們走,脫發(fā)包你有。

組織打賞賬戶為檸檬的賬戶,請標注「NCC」,并留下您的名字,以下地址可查看收支明細:https://github.com/dotnetcore/Home/blob/master/Statement-of-Income-and-Expense.md

OpenNCC,專注.NET技術(shù)的公眾號

https://www.dotnetcore.xyz

微信ID:OpenNCC

長按左側(cè)二維碼關(guān)注

歡迎打賞組織

給予我們更多的支持

總結(jié)

以上是生活随笔為你收集整理的Natasha v2.5.4 版与运行时实战的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。