2013-10-09 52 views
4

我試圖通過hostObject派一類,但顯然它不想工作:羅斯林,傳遞值通過hostObject

using Roslyn.Compilers; 
using Roslyn.Compilers.CSharp; 
using Roslyn.Scripting; 
using Roslyn.Scripting.CSharp; 


public class ShippingService 
{ 
    public class ShippingDetails//class that I want to send 
    { 
     public decimal total { get; set; } 
     public int quantity { get; set; } 
     public string destination { get; set; } 
    } 
    public static string ShipingCost(decimal total, int quantity, string destination) 
    { 
     var details = new ShippingDetails 
     { 
      total = total, 
      quantity = quantity, 
      destination = destination 
     }; 

     try 
      { 
       ScriptEngine roslynEngine = new ScriptEngine(); 
       Roslyn.Scripting.Session session = roslynEngine.CreateSession(details); 
       session.AddReference(details.GetType().Assembly); 
       session.AddReference("System.Web"); 
       session.ImportNamespace("System"); 
       session.ImportNamespace("System.Web"); 
       var result = session.Execute("details.destination"); 
       return result; 
      } 
     catch (Exception e) 
      { 
      return e.Message; 
      } 
     return ""; 
    } 

} 

當我調用該函數的目的地是例如「法國」,而我應該得到這個結果的價值,但我得到的錯誤:

Roslyn.Compilers.CompilationErrorException:(1,1):錯誤CS0103:名稱「細節」不在當前情況下存在

回答

3

錯誤信息完全正確。當你有一個主機對象時,你不能通過它保存在你的方法中的局部變量的名字來訪問它(這將如何工作?ScriptEngine將如何學習這個名字?)。

相反,你可以訪問該主機對象直接,彷彿你正在寫這種類型的成員方法(但不完全,則不能使用this或訪問非公共成員)。

這意味着你應該這樣寫:

session.Execute("destination") 

BTW,根據淨命名指南,公共屬性的名稱應以大寫字母開頭(如Destination)。