using System; using UnityFusion.CLR.Method; using UnityFusion.Runtime.Enviorment; using UnityFusion.Runtime.Intepreter; namespace UnityFusion.CLRBinding.Adapter { /// /// Adapter for . /// Enables cross-domain notification data transmission and inheritance. /// public class BaseNotificationDataAdapter : CrossBindingAdaptor { public override Type BaseCLRType => typeof(Phantom.XRMOD.ActionNotification.Runtime.BaseNotificationData); public override Type AdaptorType => typeof(Adapter); public override object CreateCLRInstance(Runtime.Enviorment.AppDomain _appdomain, ILTypeInstance _instance) { return new Adapter(_appdomain, _instance); } /// /// The implementation class that bridges BaseNotificationData to the hot-reload domain. /// public class Adapter : Phantom.XRMOD.ActionNotification.Runtime.BaseNotificationData, CrossBindingAdaptorType { readonly ILTypeInstance instance; readonly Runtime.Enviorment.AppDomain appdomain; public Adapter(Runtime.Enviorment.AppDomain _appdomain, ILTypeInstance _instance) { appdomain = _appdomain; instance = _instance; } public ILTypeInstance ILInstance => instance; public override string ToString() { IMethod tmp_Method = appdomain.ObjectType.GetMethod("ToString", 0); tmp_Method = instance.Type.GetVirtualMethod(tmp_Method); if (tmp_Method == null || tmp_Method is ILMethod) { return instance.ToString(); } else return instance.Type.FullName; } } } }