Exemple #1
0
            /// <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);
            }
Exemple #2
0
        /// <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;
            }
        }
Exemple #3
0
            /// <summary>
            /// 복제를 위한 생성자
            /// </summary>
            /// <param name="instanceImpl">복제할 대상</param>
            private InstanceCore(InstanceCore instanceImpl)
            {
                _classType = instanceImpl._classType;

                //instance 객체는 별도의 복제 과정이 필요하다.
                _instanceObject = CloneObject(instanceImpl);
            }
Exemple #4
0
        /// <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));
 }
Exemple #6
0
 private static void OnPreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e)
 {
     InstanceCore.OnPreviewMouseRightButtonDown(e);
 }
Exemple #7
0
 private static void OnPreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
 {
     InstanceCore.OnPreviewMouseLeftButtonUp(e);
 }
Exemple #8
0
 private static void OnMouseRightButtonUp(object sender, MouseButtonEventArgs e)
 {
     InstanceCore.OnMouseRightButtonUp(e);
 }
Exemple #9
0
 private static void OnMouseMove(object sender, MouseEventArgs mouseEventArgs)
 {
     InstanceCore.OnMouseMove(mouseEventArgs);
 }
Exemple #10
0
 private static void OnMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
 {
     InstanceCore.OnMouseLeftButtonDown(e);
 }