/// <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> /// 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); }
public InstanceProxyTESTinst(AssemblyProxy assemblyProxy, string classType) : base(assemblyProxy, classType) { }