/// <summary> /// InstanceImpl객체를 생성합니다. 오직 이 메소드를 통해서만 생성이 가능합니다. /// </summary> /// <param name="assemblyProxy"></param> /// <param name="classType"></param> /// <returns></returns> public static InstanceCore Create(AssemblyProxy assemblyProxy, string classType) { if (assemblyProxy == null) { throw new ArgumentNullException("assemblyProxy는 null값이 될 수 없습니다."); } if ((classType == null) || (classType == string.Empty)) { throw new ArgumentException("classType은 null or empty 값이 될 수 없습니다."); } if (assemblyProxy.IsSupportType(classType) == false) { throw new ArgumentException("전달 받은 classType을 지원하지 않습니다. " + classType); } InstanceCore instanceImpl = (InstanceCore)assemblyProxy.AppDomain.CreateInstanceAndUnwrap (typeof(InstanceCore).Assembly.FullName, typeof(InstanceCore).FullName, false, BindingFlags.Instance | BindingFlags.NonPublic, null, new object[] { assemblyProxy.Loader.LoadedFullName, classType }, null, null); return(instanceImpl); }
/// <summary> /// InstanceProxy를 생성합니다. /// </summary> /// <param name="assemblyProxy"></param> /// <param name="classType">ClassTypeFullName</param> public InstanceProxy(AssemblyProxy assemblyProxy, string classType) { try { //실제 수행객체를 생성 _instanceImpl = InstanceCore.Create(assemblyProxy, classType); //카운터 설정 _assemblyRefCounter = assemblyProxy.RefCounter; _methodInvokerCounter = new RefCounter(classType); //참조 카운터 1회 증가 및 하위카운터 등록 _assemblyRefCounter.IncrementRefCounter(); _assemblyRefCounter += _methodInvokerCounter; //AssemblyUnload 이벤트 연결 assemblyProxy.EventUnload += HandlerAssemblyProxyEventUnload; //모든과정이 통과되면 유효 객체 _isValid = true; _wasCallDispose = false; } catch (Exception e) { _isValid = false; _wasCallDispose = false; throw e; } }
/// <summary> /// 복제를 위한 생성자 /// </summary> /// <param name="instanceImpl">복제할 대상</param> private InstanceCore(InstanceCore instanceImpl) { _classType = instanceImpl._classType; //instance 객체는 별도의 복제 과정이 필요하다. _instanceObject = CloneObject(instanceImpl); }
/// <summary> /// 생성된 Instance에 Invoke하는 객체를 생성합니다. /// </summary> /// <param name="instanceProxyCore"></param> /// <param name="methodInfo"></param> /// <param name="isCopyOfInstance"></param> public MethodInvokerCore(InstanceCore instanceProxyCore, MethodInfo methodInfo, bool isCopyOfInstance = false) { if ((instanceProxyCore == null) || (methodInfo == null)) { throw new ArgumentNullException("instanceProxy, methodInfo는 null값이 될 수 없습니다,"); } //인스턴스 복제 여부에 따른 처리 if (isCopyOfInstance == true) { _instanceProxy = (InstanceCore)instanceProxyCore.Clone(); } else { _instanceProxy = instanceProxyCore; } //단 하나의 메소드 _methodInfo = methodInfo; _parameterInfo = methodInfo.GetParameters(); }
public static InstanceResponse Instance(InstanceRequest request) { return(InstanceCore.Instance(request)); }
private static void OnPreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e) { InstanceCore.OnPreviewMouseRightButtonDown(e); }
private static void OnPreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e) { InstanceCore.OnPreviewMouseLeftButtonUp(e); }
private static void OnMouseRightButtonUp(object sender, MouseButtonEventArgs e) { InstanceCore.OnMouseRightButtonUp(e); }
private static void OnMouseMove(object sender, MouseEventArgs mouseEventArgs) { InstanceCore.OnMouseMove(mouseEventArgs); }
private static void OnMouseLeftButtonDown(object sender, MouseButtonEventArgs e) { InstanceCore.OnMouseLeftButtonDown(e); }