C# Roslyn,通过hostObject传递值

C# Roslyn,通过hostObject传递值,c#,session,roslyn,scriptengine,C#,Session,Roslyn,Scriptengine,我试图通过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 { pu

我试图通过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 "";
    }   

}
当我调用函数destination时,例如“France”,我应该在结果中得到这个值,但我得到了错误:

Roslyn.Compilers.CompilationErrorException:(1,1):错误CS0103:名称“详细信息”在当前上下文中不存在


错误消息完全正确。当您有一个宿主对象时,您不能通过在方法中保存该对象的局部变量的名称来访问它(这将如何工作?如何
ScriptEngine
了解该名称?)

相反,您可以直接访问宿主对象,就像编写该类型的成员方法一样(但不完全是这样,您不能使用
this
或访问非公共成员)

这意味着您应该只写:

session.Execute("destination")
顺便说一句,根据.Net命名指南,公共属性的名称应以大写字母开头(例如,
目的地