策略模式&反射

业务代码

class Operate
    {
       public string _firstKey;
       public string _secondKey;
       public string _extendKey;
       public string FirstKey
       {
           get { return _firstKey;}
           set{_firstKey=value;}
       }
       public string SecondKey
       {
           get { return _secondKey; }
           set { _secondKey = value; }
       }
       public string ExtendKey
       {
           get { return _extendKey; }
           set { _extendKey = value; }
       }
       public virtual string GetCheckValue(string _keyOne, string _keyTwo,string _keyThree)
       {
          string _checkValue = "0";
          return _checkValue;
       }
    }
    class OperateOne : Operate
    {
        public override string GetCheckValue(string _keyOne, string _keyTwo, string _keyThree)
        {
            MethodsCheck c=new MethodsCheck();
            string _checkValue = c.fileExistCheck(_keyOne,_keyTwo).ToString();
            return _checkValue;
        }
    }
    class OperateTwo : Operate
    {
        public override string GetCheckValue(string _keyOne, string _keyTwo, string _keyThree)
        {
            MethodsCheck c = new MethodsCheck();
            string _checkValue = c.RegMachineCheck(_keyOne, _keyTwo).ToString();
            return _checkValue;
        }
    }
    class OperateThree : Operate
    {
        public override string GetCheckValue(string _keyOne, string _keyTwo, string _keyThree)
        {
            MethodsCheck c = new MethodsCheck();
            string _checkValue = c.passwordValidate(_keyOne, _keyTwo).ToString();
            return _checkValue;
        }
    }
    class OperateFour : Operate
    {
        public override string GetCheckValue(string _keyOne, string _keyTwo, string _keyThree)
        {
            MethodsCheck c = new MethodsCheck();
            string _checkValue = c.GetDriverVersion(_keyOne, _keyTwo).ToString();
            return _checkValue;
        }
    }
    class OperateFive : Operate
    {
        public override string GetCheckValue(string _keyOne, string _keyTwo, string _keyThree)
        {
            MethodsCheck c = new MethodsCheck();
            string _checkValue = c.Getfilelength(_keyOne, _keyTwo).ToString();
            return _checkValue;
        }
    }
    class OperateSix : Operate
    {
        public override string GetCheckValue(string _keyOne, string _keyTwo, string _keyThree)
        {
            MethodsCheck c = new MethodsCheck();
            string _checkValue = c.GetNetCardName(_keyTwo).ToString();
            return _checkValue;
        }
    }
    class OperateSeven : Operate
    {
        public override string GetCheckValue(string _keyOne, string _keyTwo, string _keyThree)
        {
            MethodsCheck c = new MethodsCheck();
            string _checkValue = c.GetnetConfig(_keyOne, _keyTwo).ToString();
            return _checkValue;
        }
    }
    class OperateEight : Operate
    {
        public override string GetCheckValue(string _keyOne, string _keyTwo, string _keyThree)
        {
            MethodsCheck c = new MethodsCheck();
            string _checkValue = c.RegUserCheck(_keyOne, _keyTwo).ToString();
            return _checkValue;
        }
    }
    class OperateNine : Operate
    {
        public override string GetCheckValue(string _keyOne, string _keyTwo, string _keyThree)
        {
            MethodsCheck c = new MethodsCheck();
            string _checkValue = c.GetTxTstring(_keyOne, _keyTwo).ToString();
            return _checkValue;
        }
    }
    class OperateTen : Operate
    {
        public override string GetCheckValue(string _keyOne, string _keyTwo, string _keyThree)
        {
            MethodsCheck c = new MethodsCheck();
            string _checkValue = c.GetXMLString(_keyOne, _keyTwo).ToString();
            return _checkValue;
        }
    }
    class OperateEleven : Operate
    {
        public override string GetCheckValue(string _keyOne, string _keyTwo, string _keyThree)
        {
            MethodsCheck c = new MethodsCheck();
            string _checkValue = c.GetStringLinq(_keyOne,_keyTwo,_keyThree).ToString();
            return _checkValue;
        }
    }
    class OperateContext
    {
        private Operate or;
        public void setBehavior(Operate Oper)
        {
            this.or = Oper;
        }
        public string GetValue(string _keyOne, string _keyTwo, string _keyThree)
        {
            return or.GetCheckValue(_keyOne, _keyTwo, _keyThree);
        }
    }

界面代码

 string Xmlselect = ConfigurationManager.AppSettings["selectXml"].ToString();
            DataSet ds = new DataSet();
            ds.ReadXml(strPath + @"" + Xmlselect);
            dataGridView1.DataSource = ds.Tables[0].DefaultView;
            for (int i = 0; i < ds.Tables["CheckTable"].Rows.Count; i++)
            {
                string MethodID = ds.Tables["CheckTable"].Rows[i]["MethodId"].ToString();
                string CheckValue;
                string refValue = ds.Tables["CheckTable"].Rows[i]["RefValue"].ToString();
                OperateContext oc = new OperateContext();
                oc.setBehavior((Operate)Assembly.Load("SECC").CreateInstance(("SECC."+MethodID),false,BindingFlags.Default,null,null,null,null));
                CheckValue = oc.GetValue(ds.Tables["CheckTable"].Rows[i]["FirKey"].ToString(), ds.Tables["CheckTable"].Rows[i]["SecKey"].ToString(), ds.Tables["CheckTable"].Rows[i]["CheckRemark"].ToString());
                ds.Tables["CheckTable"].Rows[i]["CheckValue"] = CheckValue;
                if (refValue == CheckValue)
               {
                    this.dataGridView1[0, i].Value = true;
               }
               else
               {
                   this.dataGridView1[0, i].Value = false;
                   this.dataGridView1[5, i].Style.ForeColor = Color.DarkRed;
                   lg.log(ds.Tables["CheckTable"].Rows[i]["CheckName"].ToString() + " Check " + ds.Tables["CheckTable"].Rows[i]["CheckValue"].ToString(), strPath, "ErrorLog");
               }
            }

XML文件

<?xml version="1.0" encoding="utf-8"?>
<Check>

<CheckTable>
<MethodID>OperateOne</MethodID>
<FirKey>C:\</FirKey>
<SecKey>ec.exe</SecKey>
    <Checkid>1</Checkid>
    <CheckName>Install EC.exe</CheckName>
    <RefValue>True</RefValue>
    <CheckValue>0</CheckValue>
    <CheckRemark></CheckRemark>
</CheckTable>

<CheckTable>
<MethodID>OperateOne</MethodID>
<FirKey>C:\Windows\Fonts\</FirKey>
<SecKey>Vrinda.ttf</SecKey>
    <Checkid>2</Checkid>
    <CheckName>Install EC.exe</CheckName>
    <RefValue>True</RefValue>
    <CheckValue>0</CheckValue>
    <CheckRemark></CheckRemark>
</CheckTable>

<CheckTable>
<MethodID>OperateOne</MethodID>
<FirKey>C:\Windows\System32\</FirKey>
<SecKey>MSVCR71.DLL</SecKey>
    <Checkid>3</Checkid>
    <CheckName>Install EC.exe</CheckName>
    <RefValue>True</RefValue>
    <CheckValue>0</CheckValue>
    <CheckRemark></CheckRemark>
</CheckTable>

<CheckTable>
<MethodID>OperateThree</MethodID>
<FirKey>Administrator</FirKey>
<SecKey>admin</SecKey>
    <Checkid>3</Checkid>
    <CheckName>AdminPassword</CheckName>
    <RefValue>True</RefValue>
    <CheckValue></CheckValue>
    <CheckRemark></CheckRemark>
</CheckTable>

<CheckTable>
<MethodID>OperateThree</MethodID>
<FirKey>Prodiva</FirKey>
<SecKey>Pica$4$Pass</SecKey>
    <Checkid>4</Checkid>
    <CheckName>ProdivaPassword</CheckName>
    <RefValue>True</RefValue>
    <CheckValue></CheckValue>
    <CheckRemark></CheckRemark>
</CheckTable>

<CheckTable>
<MethodID>OperateThree</MethodID>
<FirKey>Ethan</FirKey>
<SecKey>e</SecKey>
    <Checkid>5</Checkid>
    <CheckName>ProdivaPassword</CheckName>
    <RefValue>True</RefValue>
    <CheckValue></CheckValue>
    <CheckRemark></CheckRemark>
</CheckTable>

<CheckTable>
<MethodID>OperateFour</MethodID>
<FirKey>Driver</FirKey>
<SecKey>MONITORDELF014</SecKey>
    <Checkid>5</Checkid>
    <CheckName>Driver</CheckName>
    <RefValue>6.1.7600.16385</RefValue>
    <CheckValue></CheckValue>
    <CheckRemark></CheckRemark>
</CheckTable>

<CheckTable>
<MethodID>OperateFive</MethodID>
<FirKey>C:Windows</FirKey>
<SecKey>SCANACQ3090.ini</SecKey>
    <Checkid>5</Checkid>
    <CheckName>SCANACQ3090.ini</CheckName>
    <RefValue>1074</RefValue>
    <CheckValue></CheckValue>
    <CheckRemark></CheckRemark>
</CheckTable>

<CheckTable>
<MethodID>OperateSix</MethodID>
<FirKey>C:Windows</FirKey>
<SecKey>Realtek PCIe GBE Family Controller</SecKey>
    <Checkid>5</Checkid>
    <CheckName>CardName</CheckName>
    <RefValue>TestNet</RefValue>
    <CheckValue></CheckValue>
    <CheckRemark></CheckRemark>
</CheckTable>

<CheckTable>
<MethodID>OperateSeven</MethodID>
<FirKey>Realtek PCIe GBE Family Controller</FirKey>
<SecKey>*FlowControl</SecKey>
    <Checkid>5</Checkid>
    <CheckName>SCANACQ3090.ini</CheckName>
    <RefValue>1</RefValue>
    <CheckValue></CheckValue>
    <CheckRemark></CheckRemark>
</CheckTable>


<CheckTable>
<MethodID>OperateSeven</MethodID>
<FirKey>Realtek PCIe GBE Family Controller</FirKey>
<SecKey>*JumboPacket</SecKey>
    <Checkid>5</Checkid>
    <CheckName>SCANACQ3090.ini</CheckName>
    <RefValue>TestNet</RefValue>
    <CheckValue></CheckValue>
    <CheckRemark></CheckRemark>
</CheckTable>

<CheckTable>
<MethodID>OperateEleven</MethodID>
<FirKey>C:DICOMServer.xml</FirKey>
<SecKey>Timemedical/MPPSDicom/MPPSDicomNodes</SecKey>
    <Checkid>5</Checkid>
    <CheckName>MPPSDicom-AETitle</CheckName>
    <RefValue>LWPACS</RefValue>
    <CheckValue></CheckValue>
    <CheckRemark>AETitle</CheckRemark>
</CheckTable>

<CheckTable>
<MethodID>OperateEleven</MethodID>
<FirKey>C:DICOMServer.xml</FirKey>
<SecKey>Timemedical/MPPSDicom/MPPSDicomNodes</SecKey>
    <Checkid>5</Checkid>
    <CheckName>MPPSDicom-IPAddress</CheckName>
    <RefValue>192.168.1.253</RefValue>
    <CheckValue></CheckValue>
    <CheckRemark>IPAddress</CheckRemark>
</CheckTable>

<CheckTable>
<MethodID>OperateEleven</MethodID>
<FirKey>C:DICOMServer.xml</FirKey>
<SecKey>Timemedical/MPPSDicom/MPPSDicomNodes</SecKey>
    <Checkid>5</Checkid>
    <CheckName>MPPSDicom-PortNo</CheckName>
    <RefValue>4443</RefValue>
    <CheckValue></CheckValue>
    <CheckRemark>PortNo</CheckRemark>
</CheckTable>


<CheckTable>
<MethodID>OperateEleven</MethodID>
<FirKey>C:DICOMServer.xml</FirKey>
<SecKey>Timemedical/MWLDicom/MWLDicomNote</SecKey>
    <Checkid>5</Checkid>
    <CheckName>MWL-AETitle</CheckName>
    <RefValue>LWPACS</RefValue>
    <CheckValue></CheckValue>
    <CheckRemark>AETitle</CheckRemark>
</CheckTable>

<CheckTable>
<MethodID>OperateEleven</MethodID>
<FirKey>C:DICOMServer.xml</FirKey>
<SecKey>Timemedical/MWLDicom/MWLDicomNote</SecKey>
    <Checkid>5</Checkid>
    <CheckName>MWL-IPAddress</CheckName>
    <RefValue>192.168.1.253</RefValue>
    <CheckValue></CheckValue>
    <CheckRemark>IPAddress</CheckRemark>
</CheckTable>

<CheckTable>
<MethodID>OperateEleven</MethodID>
<FirKey>C:DICOMServer.xml</FirKey>
<SecKey>Timemedical/MWLDicom/MWLDicomNote</SecKey>
    <Checkid>5</Checkid>
    <CheckName>MWL-PortNo</CheckName>
    <RefValue>4443</RefValue>
    <CheckValue></CheckValue>
    <CheckRemark>PortNo</CheckRemark>
</CheckTable>


</Check>

  

原文地址:https://www.cnblogs.com/EthanSun/p/3145587.html