コード例 #1
0
ファイル: DynamicAppVar.cs プロジェクト: bangush/Friendly
        /// <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);
        }
コード例 #2
0
ファイル: DynamicAppType.cs プロジェクト: bangush/Friendly
        /// <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());
        }
コード例 #3
0
ファイル: DynamicAppType.cs プロジェクト: bangush/Friendly
        /// <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());
            }
        }