Ejemplo n.º 1
0
    public static void AutoDispose(this UIFrame.IViewModel viewModel, System.Type type = null)
    {
        if (type == null)
        {
            type = viewModel.GetType();
        }
        var fields = type.GetFields(System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Public);

        foreach (var field in fields)
        {
            var fieldValue = field.GetValue(viewModel);
            if (fieldValue != null)
            {
                var fieldType = fieldValue.GetType();
                if (fieldValue != null && (field.FieldType.IsSubclassOf(typeof(System.IDisposable)) || fieldType.IsSubclassOf(typeof(System.IDisposable)) || fieldType.GetInterface("System.IDisposable") != null))
                {
                    var methods = fieldType.GetMethods(System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public);
                    System.Reflection.MethodInfo method = null;
                    for (int i = 0, c = methods.Length; i < c; i++)
                    {
                        if ("Dispose" == methods[i].Name && methods[i].GetParameters().Length == 0)
                        {
                            method = methods[i];
                        }
                    }
                    //Debug.Log("$$ will dispose field name:" + field.Name);
                    if (method != null)
                    {
                        method.Invoke(fieldValue, null);
                    }
                }
            }
        }
    }
Ejemplo n.º 2
0
 public static UIFrame.UIDataRepo GetDataRepo(this UIFrame.IViewModel viewmodel)
 {
     return(UIFrame.UIDataRepo.Instance);
 }