static void ResolveRefOutArgs(AppFriend app, Type type, object src, out object arg, out ResolveArgument resolveArgument)
 {
     if (type.IsInterface)
     {
         ResolveInterfaceRefOutArgs(app, type, src, out arg, out resolveArgument);
     }
     else if (type == typeof(AppVar))
     {
         ResolveAppVarRefOutArgs(app, type, src, out arg, out resolveArgument);
     }
     else
     {
         var func = UserWrapperUtility.FindCreateConstructor(type);
         if (func != null)
         {
             ResolveUserWrapperRefOutArgs(func, app, src, out arg, out resolveArgument);
         }
         else
         {
             AppVar appVar = app.Dim(src);
             arg = appVar;
             resolveArgument = () => appVar.Core;
         }
     }
 }
 static void ResolveInterfaceRefOutArgs(AppFriend app, Type type, object src, out object arg, out ResolveArgument resolveArgument)
 {
     if (src == null)
     {
         AppVar appVar = app.Dim();
         arg = appVar;
         resolveArgument = () => FriendlyProxyFactory.WrapFriendlyProxyInstance(type, appVar);
     }
     else
     {
         var proxy = RemotingServices.GetRealProxy(src) as IAppVarOwner;
         if (proxy == null)
         {
             AppVar appVar = app.Dim(src);
             arg = appVar;
             resolveArgument = () => FriendlyProxyFactory.WrapFriendlyProxyInstance(type, appVar);
         }
         else
         {
             arg = proxy;
             resolveArgument = () => AppVarUtility.IsNull(proxy.AppVar) ? null : src;
         }
     }
 }
 static void ResolveUserWrapperRefOutArgs(UserWrapperUtility.Construct func, AppFriend app, object src, out object arg, out ResolveArgument resolveArgument)
 {
     if (src == null)
     {
         AppVar appVar = app.Dim();
         arg = appVar;
         resolveArgument = () =>func(appVar);
     }
     else
     {
         arg = src;
         IAppVarOwner owner = src as IAppVarOwner;
         resolveArgument = () => (owner != null && AppVarUtility.IsNull(owner.AppVar)) ? null : src;
     }
 }
 static void ResolveAppVarRefOutArgs(AppFriend app, Type type, object src, out object arg, out ResolveArgument resolveArgument)
 {
     if (src == null)
     {
         AppVar appVar = app.Dim();
         arg = appVar;
         resolveArgument = () => appVar;
     }
     else
     {
         arg = src;
         resolveArgument = () => src;
     }
 }