zoukankan      html  css  js  c++  java
  • WCF 不支持泛型协议 及 通过父类给子类赋值 通过反射加工

    WCF 不支持泛型协议及通过父类给子类赋值,解决办法,需要反射进行赋值

    Model

        [DataContract]
        [KnownType(typeof(Test1))]
        public class BaseTest
        {
            [DataMember]
            public int BaseTest_Index { get; set; }
            
        }
    
        [DataContract]
        public class Test1 : BaseTest
        {
    
            [DataMember]
            public int Test1_Index { get; set; }
            
        }

    Server

     public interface ITestServer
        {
            void Test(BaseTest baseTest);
        }
    
    
        public class TestServer : ITestServer
        {
            
            public void Test(BaseTest baseTest)
            {
                //运用反射进行调用
                using (ServerManager serverManager = new ServerManager(new SqlConnection("数据库连接字符串")))
                {
                    //通过反射读取方法,并获取类型
                    MethodInfo methodInfo = serverManager.GetType().GetMethod("Test").MakeGenericMethod(baseTest.GetType());
                    //调用方法。。。。。
                    //如果是多个参数  new object{baseTest, ,  , ,  ,} 严格按着顺序来
                    methodInfo.Invoke(serverManager, new[] {baseTest});
                    
                }
                
            }
        }
    
        public class ServerManager:IDisposable
        {
            protected IDbConnection  _db ;
    
            public ServerManager(IDbConnection db)
            {
                this._db = db;
            }
    
            public void Test<T>(BaseTest baseTest) where T:BaseTest,new()
            {
                //........//
            }
            
            
            public void Dispose()
            {
                _db.Dispose();
            }
        }

    Client ,这边选用伪代码来说明,并 通过父类给子类赋值

     public class Client
        {
            //.......//
            public BaseTest basetest = new Test1();
    
            
            public void Basetest(BaseTest baseTest)
            {
                
                //通过反射,从父类中获取子类属性,并进行赋值
                PropertyInfo property = baseTest.GetType().GetProperties().FirstOrDefault(t=>t.Name =="Test1_Index");
                //赋新值
                property.SetValue(baseTest,1);
               
                //伪代码
                
                TestServer server = new TestServer();
                server.Test(baseTest);
                
                //
                
            }
    
    
    
            //.......//
    
    
        }
  • 相关阅读:
    在 Eclipse 中使用 JUnit4 进行单元测试
    版本控制之道使用Git
    程序员成熟的标志
    Java 编程需要注意的细节
    【netty】netty的websocketframe
    求一个数内含1个次数
    apache bench的使用
    更改centos epel源
    [linux]centos7下解决yum install mysqlserver没有可用包
    cacti的安装与配置
  • 原文地址:https://www.cnblogs.com/Bull-Rush/p/14073339.html
Copyright © 2011-2022 走看看