/// <summary> /// Provides dynamic resolution of method calls. /// To specify Async and/or OperationTypeInfo, please pass these as arguments. /// They can be included in any order. /// </summary> /// <param name="binder">Binder.</param> /// <param name="args">Arguments.</param> /// <param name="result">Return value.</param> /// <returns>Success or failure.</returns> #else /// <summary> /// メソッド実行の自動解決です。 /// AsyncとOperationTypeInfoを指定する場合は、引数に渡してください。 /// その順番はどこでも構いません。 /// </summary> /// <param name="binder">バインダー。</param> /// <param name="args">引数。</param> /// <param name="result">戻り値。</param> /// <returns>成否。</returns> #endif public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result) { Async async; OperationTypeInfo typeInfo; args = DynamicFriendlyOperationUtility.ResolveArguments(args, out async, out typeInfo); result = DynamicFriendlyOperationUtility.GetFriendlyOperation(_appVar, binder.Name, async, typeInfo)(args).Dynamic(); return(true); }
/// <summary> /// 対象アプリケーション内にインスタンス生成。 /// </summary> /// <param name="app">アプリケーション操作クラス。</param> /// <param name="typeFullName">生成する型のフルネーム。</param> /// <param name="args">引数。</param> /// <returns>生成したインスタンスを操作するためのDynamicAppVar。</returns> private static dynamic NewAppVar(AppFriend app, string typeFullName, object[] args) { Async async; OperationTypeInfo typeInfo; args = DynamicFriendlyOperationUtility.ResolveArguments(args, out async, out typeInfo); if (async != null) { throw new FriendlyOperationException(Resources.ErrorInstanceCreateCantUseAsync); } return((typeInfo == null) ? app.Dim(new NewInfo(typeFullName, args)).Dynamic() : app.Dim(new NewInfo(typeFullName, args), typeInfo).Dynamic()); }
/// <summary> /// メソッド実行の動的解決です。 /// AsyncとOperationTypeInfoを指定する場合は、引数に渡してください。 /// その順番はどこでも構いません。 /// </summary> /// <param name="name">名前。</param> /// <param name="args">引数。</param> /// <returns>戻り値。</returns> private dynamic InvokeMember(string name, object[] args) { string nextTypeName = JointName(_name, name); if (IsTypeName(_app, nextTypeName, _isType)) { //型名称になれば、生成する。 return(NewAppVar(_app, nextTypeName, args)); } else { //staticメソッドの呼び出し。 Async async; OperationTypeInfo typeInfo; args = DynamicFriendlyOperationUtility.ResolveArguments(args, out async, out typeInfo); return(DynamicFriendlyOperationUtility.GetFriendlyOperation(_app, nextTypeName, async, typeInfo)(args).Dynamic()); } }