16 Kasım 2017 Perşembe

Roslyn ScriptEngine Sınıfı

Giriş
Şu satırı dahil ederiz.
using Roslyn.Compilers;
using Roslyn.Compilers.CSharp;
using Roslyn.Scripting;
using Roslyn.Scripting.CSharp;
Constructor
Şöyle yaparız.
var session = Session.Create();
var engine = new ScriptEngine();
engine.Execute("using System;", session);
engine.Execute("double Sin(double d) { return Math.Sin(d); }", session);
engine.Execute("MessageBox.Show(Sin(1.0));", session);
Constructor - host nesne
Kendi uygulamam ile ScriptEngine nesnesinin haberleşebilmesi için kullanılır. Şöyle yaparız.
public class MyHostObject
{
    public List<int> list_of_ints;
    public int an_int = 23;
}

var hostObject = new MyHostObject();
hostObject.list_of_ints = new List<int>();
hostObject.list_of_ints.Add(2);
var engine = new ScriptEngine(new[] { hostObject.GetType().Assembly.Location });

// passing reference to hostObject upon session creation
var session = Session.Create(hostObject);

// prints `24` to console
engine.Execute(@"System.Console.WriteLine(an_int + list_of_ints.Count);", 
               session); 

CreateSession metodu
Şöyle yaparız.
ScriptEngine roslynEngine = new ScriptEngine();
Roslyn.Scripting.Session session = roslynEngine.CreateSession(this);
Execute metodu - epxression
Belirtilen expression'ı çalıştırır.
Örnek ver

Execute metodu - epxression + session
Belirtilen expression'ı belirtilen session ile çalıştırır. Böylece birden fazla expression aynı session nesnesini paylaşabilir.
Örnek ver

ExecuteFile metodu
Örnek ver

-------------------------
Python
Python scripti şöyle yüklenir.
//Basic engine to run python script. - Part1
ScriptEngine engine = Python.CreateEngine();
ScriptSource source = engine.CreateScriptSourceFromFile("/python.py");
ScriptScope scope = engine.CreateScope();
source.Execute(scope); 
Script içinde bir Python class'ı vardır. Bu sınıfın bir metodu şöyle çağrılır.
//Part2
Object myclass = engine.Operations.Invoke(scope.GetVariable("pythonScriptClass"));
object[] parameters = new object[] { "Hi",3 };
engine.Operations.InvokeMember(myclass, "theMethod", parameters);

Hiç yorum yok:

Yorum Gönder