Пример #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;
            }
        }
Пример #2
0
        /// <summary>
        /// MethodInvoker를 생성합니다.
        /// </summary>
        /// <param name="core">MethodCore</param>
        /// <param name="instanceRefCounter">InstaceProxy의 Method Counter</param>
        /// <param name="args">기타 변수. 기본 Invoker에서는 사용되지 않습니다.</param>
        internal MethodInvoker(MethodInvokerCore core,
                               RefCounter instanceRefCounter,
                               object[] args)
            : this()
        {
            if (core == null || instanceRefCounter == null)
            {
                _isValid = false;
                throw new ArgumentNullException("core or instanceRefCounter는 null값이 될 수 없습니다.");
            }

            //코어
            _core = core;

            //참조 횟수 증가
            _instanceRefCounter = instanceRefCounter;
            _instanceRefCounter.IncrementRefCounter();

            //유효함
            _isValid = true;
        }
Пример #3
0
 /// <summary>
 /// 참조 횟수를 증가 시킵니다.
 /// 객체에 대한 참조가 발생하면 반드시 증가 시켜야 합니다.
 /// </summary>
 public void IncrementRefThis()
 {
     _assemblyRefCounter.IncrementRefCounter();
 }