Saya telah menulis sebuah paket, SharpByte.Dynamic , untuk menyederhanakan tugas menyusun dan menjalankan kode secara dinamis. Kode dapat dipanggil pada objek konteks apa pun menggunakan metode ekstensi seperti yang dijelaskan lebih lanjut di sini .
Sebagai contoh,
someObject.Evaluate<int>("6 / {{{0}}}", 3))
mengembalikan 3;
someObject.Evaluate("this.ToString()"))
mengembalikan representasi string objek konteks;
someObject.Execute(@
"Console.WriteLine(""Hello, world!"");
Console.WriteLine(""This demonstrates running a simple script"");
");
menjalankan pernyataan tersebut sebagai skrip, dll.
Executable bisa didapatkan dengan mudah menggunakan metode pabrik, seperti yang terlihat pada contoh di sini - yang Anda butuhkan hanyalah kode sumber dan daftar parameter bernama yang diharapkan (token disematkan menggunakan notasi braket tiga, seperti {{{0}} }, untuk menghindari tabrakan dengan string.Format () serta sintaks mirip Handlebars):
IExecutable executable = ExecutableFactory.Default.GetExecutable(executableType, sourceCode, parameterNames, addedNamespaces);
Setiap objek yang dapat dieksekusi (skrip atau ekspresi) aman untuk thread, dapat disimpan dan digunakan kembali, mendukung logging dari dalam skrip, menyimpan informasi waktu dan pengecualian terakhir jika ditemukan, dll. Ada juga metode Copy () yang dikompilasi pada masing-masing untuk memungkinkan membuat salinan murah, yaitu menggunakan objek yang dapat dieksekusi yang dikompilasi dari skrip atau ekspresi sebagai template untuk membuat yang lain.
Overhead dari mengeksekusi skrip atau pernyataan yang sudah dikompilasi relatif rendah, di bawah mikrodetik pada perangkat keras sederhana, dan skrip dan ekspresi yang sudah dikompilasi di-cache untuk digunakan kembali.