using ILRuntime.CLR.Method; 
 | 
using ILRuntime.Runtime.Enviorment; 
 | 
using ILRuntime.Runtime.Intepreter; 
 | 
using Snxxz.UI; 
 | 
using UnityEngine; 
 | 
  
 | 
/// <summary> 
 | 
/// 热更工程使用window的基础代理类 
 | 
/// </summary> 
 | 
public class ILWindowProxy : Window 
 | 
{ 
 | 
    ILTypeInstance obj; 
 | 
  
 | 
    IMethod bindController, addListeners, onPreOpen, onAfterOpen, onPreClose, onAfterClose, onDestroy, lateUpdate, onActived; 
 | 
    IMethod dipose; 
 | 
    AppDomain appDomain 
 | 
    { 
 | 
        get { return ILLauncherProxy.Instance.appdomain; } 
 | 
    } 
 | 
    private void Init() 
 | 
    { 
 | 
        InitWidgts(); 
 | 
        //使用与预制同名的代码文件 
 | 
        var windowName =gameObject.name; 
 | 
        var baseType = appDomain.LoadedTypes["ILWindow"]; 
 | 
        obj = appDomain.Instantiate(windowName); 
 | 
        if (obj == null) 
 | 
        { 
 | 
            DebugEx.LogErrorFormat("ILWindow 热更代码不存在:{0}", windowName); 
 | 
            return; 
 | 
        } 
 | 
        var setProxy = baseType.GetMethod("SetProxy", 1); 
 | 
        appDomain.Invoke(setProxy, obj, this);//将当前代理对象传过去 
 | 
  
 | 
        //此处用type获取的方法,子类不定义是不会执行Logic工程父类的方法 
 | 
        var type = obj.Type; 
 | 
  
 | 
        bindController = type.GetMethod("BindController"); 
 | 
        addListeners = type.GetMethod("AddListeners"); 
 | 
        onPreOpen = type.GetMethod("OnPreOpen"); 
 | 
        onAfterOpen = type.GetMethod("OnAfterOpen"); 
 | 
        onPreClose = type.GetMethod("OnPreClose"); 
 | 
        onAfterClose = type.GetMethod("OnAfterClose"); 
 | 
        onDestroy = type.GetMethod("OnDestroy"); 
 | 
  
 | 
        lateUpdate = type.GetMethod("LateUpdate"); 
 | 
        onActived = type.GetMethod("OnActived"); 
 | 
  
 | 
        //baseType 获取的方法,才会执行父类Logic工程的父类方法,但同时也不会调用子类重写的方法 
 | 
        dipose = baseType.GetMethod("Dipose", 0); 
 | 
    } 
 | 
  
 | 
    protected override void OnActived() 
 | 
    { 
 | 
        if (onActived != null) 
 | 
            appDomain.Invoke(onActived, obj); 
 | 
    } 
 | 
  
 | 
    protected override void LateUpdate() 
 | 
    { 
 | 
        if (lateUpdate != null) 
 | 
            appDomain.Invoke(lateUpdate, obj); 
 | 
    } 
 | 
  
 | 
    protected override void BindController() 
 | 
    { 
 | 
        Init(); 
 | 
        if (bindController != null) 
 | 
            appDomain.Invoke(bindController, obj); 
 | 
    } 
 | 
    protected override void AddListeners() 
 | 
    { 
 | 
        if (addListeners != null) 
 | 
            appDomain.Invoke(addListeners, obj); 
 | 
    } 
 | 
    protected override void OnPreOpen() 
 | 
    { 
 | 
        if (onPreOpen != null) 
 | 
            appDomain.Invoke(onPreOpen, obj); 
 | 
    } 
 | 
    protected override void OnAfterOpen() 
 | 
    { 
 | 
        if (onAfterOpen != null) 
 | 
            appDomain.Invoke(onAfterOpen, obj); 
 | 
    } 
 | 
    protected override void OnPreClose() 
 | 
    { 
 | 
        if (onPreClose != null) 
 | 
            appDomain.Invoke(onPreClose, obj); 
 | 
    } 
 | 
    protected override void OnAfterClose() 
 | 
    { 
 | 
        if (onAfterClose != null) 
 | 
            appDomain.Invoke(onAfterClose, obj); 
 | 
    } 
 | 
  
 | 
    private void OnDestroy() 
 | 
    { 
 | 
        if (onDestroy != null) 
 | 
            appDomain?.Invoke(onDestroy, obj); 
 | 
        if (dipose != null) 
 | 
            appDomain?.Invoke(dipose, obj); 
 | 
        bindController = null; 
 | 
        addListeners = null; 
 | 
        onPreOpen = null; 
 | 
        onAfterOpen = null; 
 | 
        onPreClose = null; 
 | 
        onAfterClose = null; 
 | 
        onDestroy = null; 
 | 
        lateUpdate = null; 
 | 
        onActived = null; 
 | 
        obj = null; 
 | 
    } 
 | 
  
 | 
} 
 |