C\#실제 응용 에 반 사 된 인 스 턴 스 코드

반 사 는 패 키 징 프로그램 집합,모듈 과 형식의 대상(Type 형식)을 제공 합 니 다.반사 동적 생 성 형식의 인 스 턴 스 를 사용 하여 형식 을 기 존 대상 에 연결 하거나 기 존 대상 에서 유형 을 가 져 오고 그 방법 을 호출 하거나 필드 와 속성 에 접근 할 수 있 습 니 다.코드 에 속성 을 사용 하면 반사 로 접근 할 수 있 습 니 다.
다음은 프로젝트 에 반 사 된 사용 방법 을 사례 로 설명 하 겠 습 니 다.
크게 세 단계 로 나 뉜 다.
첫 번 째 단 계 는 웹.config 에서 다음 코드 를 설정 합 니 다.(분석 에 필요 한 dll 을 동적 으로 수정 하기 위해 서 입 니 다)

<appSettings> 
    <add key="BizAssembly" value="PSMS.Biz"/> 
</appSettings> 
두 번 째 단 계 는 공공 프로그램 집합 을 처리 하 는 클래스 를 정의 합 니 다.

/// <summary> 
    ///  
    /// </summary> 
    public static class FacadeService 
    { 
        static IDictionary<string, Type> serviceClassCatalog;//  
        static FacadeService() 
        { 
            serviceClassCatalog = new Dictionary<string, Type>(); 
            Assembly assembly = Assembly.Load(new AssemblyName(ConfigurationManager.AppSettings["BizAssembly"]));//  
            Type[] types = assembly.GetExportedTypes();//  
            Type baseType = typeof(MarshalByRefObject); 
            foreach (Type type in types) 
            { 
                if (baseType.IsAssignableFrom(type)) 
                { 
                    Type[] interfaces = type.GetInterfaces(); 
                    // ,  
                    if (interfaces.Length > 0) 
                    { 
                        serviceClassCatalog.Add(interfaces[0].FullName, type); 
                    } 
                } 
            } 
        } 

        /// <summary> 
        /// ,  
        /// </summary> 
        /// <typeparam name="IFacade"> </typeparam> 
        /// <returns> </returns> 
        public static IFacade GetFacade<IFacade>() 
        { 
            string typeName = typeof(IFacade).FullName; 
            if (serviceClassCatalog.ContainsKey(typeName)) 
            { 
                object realProxy = Activator.CreateInstance(serviceClassCatalog[typeName]); 
                return (IFacade)realProxy; 
            } 
            else 
            { 
                throw new Exception(" 。"); 
            } 
        } 
    } 
세 번 째 단 계 는 프로그램 코드 에서 호출 을 실현 합 니 다.

public partial class MyTest: System.Web.UI.Page 

   // ( )  
    static IUserInfoFacade userInfoFacade = FacadeService.GetFacade<IUserInfoFacade>(); 
   //  
   //...... 
   //...... 
   private void Method1() 
   { 
       //  
       List<UserInfo> lstUserInfo = userInfoFacade.GetUserInfoList(unitCode, 0, 0); 
       //  
        //...... 
       //...... 
   } 

좋은 웹페이지 즐겨찾기