本文整理汇总了C#中System.Dynamic.DynamicMetaObject.BindInvokeMember方法的典型用法代码示例。如果您正苦于以下问题:C# DynamicMetaObject.BindInvokeMember方法的具体用法?C# DynamicMetaObject.BindInvokeMember怎么用?C# DynamicMetaObject.BindInvokeMember使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类System.Dynamic.DynamicMetaObject
的用法示例。
在下文中一共展示了DynamicMetaObject.BindInvokeMember方法的8个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Bind
/// <summary>
/// Performs the binding of the dynamic invoke member operation.
/// </summary>
/// <param name="target">The target of the dynamic invoke member operation.</param>
/// <param name="args">An array of arguments of the dynamic invoke member operation.</param>
/// <returns>The <see cref="DynamicMetaObject"/> representing the result of the binding.</returns>
public sealed override DynamicMetaObject Bind(DynamicMetaObject target, DynamicMetaObject[] args)
{
ContractUtils.RequiresNotNull(target, "target");
ContractUtils.RequiresNotNullItems(args, "args");
return target.BindInvokeMember(this, args);
}
示例2: TryBindInvokeMember
public static bool TryBindInvokeMember(InvokeMemberBinder binder, DynamicMetaObject instance, DynamicMetaObject[] args, out DynamicMetaObject result) {
ContractUtils.RequiresNotNull(binder, "binder");
ContractUtils.RequiresNotNull(instance, "instance");
ContractUtils.RequiresNotNull(args, "args");
if (TryGetMetaObject(ref instance)) {
//
// Demand Full Trust to proceed with the binding.
//
new PermissionSet(PermissionState.Unrestricted).Demand();
result = instance.BindInvokeMember(binder, args);
return true;
} else {
result = null;
return false;
}
}
示例3: TestMetaObject
public static void TestMetaObject(DynamicMetaObject target, string methodName, object[] arguments, bool isExtension = false)
{
InvokeMemberBinder binder = new TestInvokeMemberBinder(methodName, arguments.Length);
DynamicMetaObject[] args = new DynamicMetaObject[arguments.Length];
for (int idx = 0; idx < args.Length; idx++)
{
object value = arguments[idx];
Type valueType = value != null ? value.GetType() : typeof(object);
args[idx] = new DynamicMetaObject(Expression.Parameter(valueType), BindingRestrictions.Empty, value);
}
DynamicMetaObject result = target.BindInvokeMember(binder, args);
Assert.IsNotNull(result);
if (isExtension)
{
UnaryExpression expression = result.Expression as UnaryExpression;
Assert.IsNotNull(expression);
MethodCallExpression callExpression = expression.Operand as MethodCallExpression;
Assert.IsNotNull(callExpression);
Assert.IsTrue(callExpression.Method.ToString().Contains(methodName));
}
else
{
Assert.AreSame(target, result.Value);
}
}
示例4: TestBindParams
public static void TestBindParams(DynamicMetaObject target)
{
string methodName = "ToString";
object[] arguments = new object[] { };
InvokeMemberBinder binder = new TestInvokeMemberBinder(methodName, arguments.Length);
DynamicMetaObject[] args = new DynamicMetaObject[arguments.Length];
ExceptionTestHelper.ExpectException<ArgumentNullException>(() => { var result = target.BindInvokeMember(null, args); });
ExceptionTestHelper.ExpectException<ArgumentNullException>(() => { var result = target.BindInvokeMember(binder, null); });
}
示例5: TryBindInvokeMember
/// <summary>
/// Tries to perform binding of the dynamic invoke member operation.
/// </summary>
/// <param name="binder">An instance of the <see cref="InvokeMemberBinder"/> that represents the details of the dynamic operation.</param>
/// <param name="instance">The target of the dynamic operation. </param>
/// <param name="args">An array of <see cref="DynamicMetaObject"/> instances - arguments to the invoke member operation.</param>
/// <param name="result">The new <see cref="DynamicMetaObject"/> representing the result of the binding.</param>
/// <returns>true if operation was bound successfully; otherwise, false.</returns>
public static bool TryBindInvokeMember(InvokeMemberBinder binder, DynamicMetaObject instance, DynamicMetaObject[] args, out DynamicMetaObject result) {
ContractUtils.RequiresNotNull(binder, "binder");
ContractUtils.RequiresNotNull(instance, "instance");
ContractUtils.RequiresNotNull(args, "args");
if (TryGetMetaObject(ref instance)) {
result = instance.BindInvokeMember(binder, args);
return true;
} else {
result = null;
return false;
}
}
示例6: Bind
/// <summary>
/// Performs the binding of the dynamic operation.
/// </summary>
/// <param name="target">The target of the dynamic operation.</param>
/// <param name="args">An array of arguments of the dynamic operation.</param>
/// <returns>The System.Dynamic.DynamicMetaObject representing the result of the binding.</returns>
public override DynamicMetaObject Bind(DynamicMetaObject target, DynamicMetaObject[] args)
{
// When binding a normal message send, we have two options
if ((target is SmalltalkDynamicMetaObject) || (this.NativeName == null))
// 1. If dealing with a Smalltalk object, don't do the normal BindInvokeMember and perform our logic directly
return base.Bind(target, args);
else
// 2. For all other objects, ask the object to bing the operation and fallback to ST only if it's not successful.
// NB: Maybe we wan't to do binding BEFORE the object, so we can shadow its methods and not vice versa.
return target.BindInvokeMember(this.InvokeMemberBinder, args);
}
示例7: TryBindInvokeMember
/// <summary>
/// Tries to perform binding of the dynamic invoke member operation.
/// </summary>
/// <param name="binder">An instance of the <see cref="InvokeMemberBinder"/> that represents the details of the dynamic operation.</param>
/// <param name="instance">The target of the dynamic operation. </param>
/// <param name="args">An array of <see cref="DynamicMetaObject"/> instances - arguments to the invoke member operation.</param>
/// <param name="result">The new <see cref="DynamicMetaObject"/> representing the result of the binding.</param>
/// <returns>true if operation was bound successfully; otherwise, false.</returns>
public static bool TryBindInvokeMember(InvokeMemberBinder binder, DynamicMetaObject instance, DynamicMetaObject[] args, out DynamicMetaObject result) {
if (TryGetMetaObject(ref instance)) {
result = instance.BindInvokeMember(binder, args);
return true;
} else {
result = null;
return false;
}
}
示例8: TryBindInvokeMember
/// <summary>
/// Tries to perform binding of the dynamic invoke member operation.
/// </summary>
/// <param name="binder">An instance of the <see cref="InvokeMemberBinder"/> that represents the details of the dynamic operation.</param>
/// <param name="isSetProperty">True if this is for setting a property, false otherwise..</param>
/// <param name="instance">The target of the dynamic operation. </param>
/// <param name="args">An array of <see cref="DynamicMetaObject"/> instances - arguments to the invoke member operation.</param>
/// <param name="result">The new <see cref="DynamicMetaObject"/> representing the result of the binding.</param>
/// <returns>true if operation was bound successfully; otherwise, false.</returns>
public static bool TryBindInvokeMember(InvokeMemberBinder binder, bool isSetProperty, DynamicMetaObject instance, DynamicMetaObject[] args, out DynamicMetaObject result)
{
if (TryGetMetaObject(ref instance))
{
var comInvokeMember = new ComInvokeMemberBinder(binder, isSetProperty);
result = instance.BindInvokeMember(comInvokeMember, args);
BindingRestrictions argRestrictions = args.Aggregate(
BindingRestrictions.Empty, (current, arg) => current.Merge(arg.PSGetMethodArgumentRestriction()));
var newRestrictions = result.Restrictions.Merge(argRestrictions);
if (result.Expression.Type.IsValueType)
{
result = new DynamicMetaObject(
Expression.Convert(result.Expression, typeof(object)),
newRestrictions
);
}
else
{
result = new DynamicMetaObject(result.Expression, newRestrictions);
}
return true;
}
else
{
result = null;
return false;
}
}