Beispiel #1
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;
            }
        }
Beispiel #2
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);
            }
Beispiel #3
0
 public InstanceProxyTESTinst(AssemblyProxy assemblyProxy, string classType) : base(assemblyProxy, classType)
 {
 }