2016-03-20 13 views
3

JES Jint'da JavaScript kodunda bir .Net sınıfını tanımlarsam, JS'deki .Net sınıflarına erişebilirsiniz.Jint engine

JS Dosya Kodu:

var write = function (msg) { 

    var log = System.Console.WriteLine; 
    log(msg); 
}; 

C# Kod

Engine jsEngine = new Engine(e=>e.AllowClr()); 
string script = System.IO.File.ReadAllText("file1.js"); 
jsEngine.Execute(script); 
jsEngine.Invoke("write", "Hello World!"); //Displays in Console: "Hello World!" 
  • ben arka planda neler olduğunu anlayamıyorum? JS dosyasında hangi derleyici enjekte C# kodunu derleyecek? C# Derleyici veya JS?
  • JS dosyasında C# Listesi bildirdiysem, oluşturulan nesne JS nesnesi mi yoksa C# nesnesi mi?

cevap

1

C# kodu enjekte etmiyorsunuz, Jint yorumlayıcısı bir .NET sınıfına başvurduğunuzu anlayacaktır ve dolayısıyla bu kodu yürütün. Jint, .NET'te yazıldığından, sorduğunuz herhangi bir .NET kodunu çalıştırabilir.

Ayrıca, Jint hiçbir şey derlemez, her javascript ifadesini okur ve birbirlerini ard arda değerlendirir ve tüm değişkenleri, işlevleri ve bildirdiğiniz ve kullandığınız diğer JS eserlerini takip eder.

0

en adım çağırır çağrı adım adım açıklanmıştır: "Merhaba Dünya"

  1. jsEngine.Invoke JavaScript, yazma yöntemi uygulamak için Jint neden olur ve geçer
  2. yazma yöntemi, System.Console.WriteLine yöntemini çağırır; bu noktada, Jint, JavaScript'ten yönetilen koda geri döner ve bu yöntemi çağırır. Sorularınıza Şimdi

: Hiçbir kod enjekte alır

  1. . Kodunuz yalnızca yönetilen koddan (yorumlandı) yönetilen uygulamaya geçiş yapar.
  2. JS'de bir C# List nesnesi oluşturursanız, nesne gerçek yönetilen bir .Net nesnesidir.