private void SetMember(IScriptContext context, object obj, object value) { // Check whether we are setting member value for a dynamic object var dynamicObject = obj as DynamicObject; if (dynamicObject != null) { // Get or create a new call site for a setter var setter = CallSiteCache.GetOrCreatePropertySetter(_identifier); if (setter == null) { throw new ScriptIdNotFoundException(_identifier); } // set property value for the dynamic object setter.Target(setter, obj, value); } else { IMemberBinding bind = RuntimeHost.Binder.BindToMember(obj, _identifier, true); if (bind == null) { throw new ScriptIdNotFoundException(_identifier); } bind.SetValue(value); } context.Result = value; }
public void AssignTo(object target) { var scope = target as IScriptScope; if (scope != null) { foreach (string field in Fields) { scope.SetItem(field, _fields[field]); } return; } foreach (string field in Fields) { IMemberBinding bind = RuntimeHost.Binder.BindToMember(target, field, false); if (bind != null) { bind.SetValue(_fields[field]); } //RuntimeHost.Binder.Set(field, target, fields[field], false); } }