架構之反射實現原始碼(不知道要幹什麼確需要知道能幹什麼)

來源:互聯網
上載者:User

做過架構的朋友或許都有過不知道開發人員要幹什麼確需要知道開發人員能幹什麼的困惑,估計大家的解決思路應該也會往一處想-反射

介紹下自己的實現思路和代碼:

1、定義介面

如:   

    /// <summary>
    /// 定義了列配置預設值的C#計算規則介面
    /// by 賈世義 2009-1-15
    /// </summary>
    public interface IDefaultCalc
    {
        /// <summary>
        /// 配置的參數值字串
        /// </summary>
        string Parameter { get; set; }
        /// <summary>
        /// 目前使用者的帳號
        /// </summary>
        string UserAccount { get; set; }
        /// <summary>
        /// 計算方法 返回的值作為預設值
        /// </summary>
        /// <returns></returns>
        object GetValue();
    }

2、反射介面

/// <summary>
/// 反射判斷類是否實現IDefaultCalc
/// </summary>
/// <param name="iDefaultCalc"></param>
/// <returns>錯誤 null時正確</returns>
public static string IsDefaultCalc(string iDefaultCalc)
{
if (String.IsNullOrEmpty(iDefaultCalc))
{
return "類名稱不可為空,需要為實現了IDefaultCalc介面的類名";
}
try
{
int p = iDefaultCalc.LastIndexOf(".");
if (p > 0)
{
Assembly calcAssembly = Assembly.Load(iDefaultCalc.Substring(0, p));
object calcObj = calcAssembly.CreateInstance(iDefaultCalc, true);
if (calcObj == null)
{
return "類反射錯誤:" + iDefaultCalc + "不存在";
}
else if (calcObj is IDefaultCalc)
{
return null;
}
else
{
return iDefaultCalc + "類未實現IDefaultCalc介面";
}
}
else
{
return iDefaultCalc + "類必須有命名空間";
}
}
catch (Exception ex)
{
return iDefaultCalc + "類反射錯誤:" + ex.Message;
}
}

3、提供配置實作類別的入口

在xml中定義預設值字串,如:MyQuery.BAL.QueryDefault

4、使用者需要繼承介面實作類別

如:

using System;
using System.Collections.Generic;
using System.Text;
using MyQuery.MyControl;
using MyQuery.DAL;
using MyQuery.Utils;
using System.Web;

namespace PASA.BAL
{
    /// <summary>
    /// 針對查詢範本Foot的列計算介面的實現
    /// by 賈世義 2009-1-28
    /// </summary>
    public class QueryDefault : IDefaultCalc
    {
        #region IDefaultCalc Members
        private string _parameter = null;
        /// <summary>
        /// 配置的參數值字串
        /// </summary>
        public string Parameter
        {
            get
            {
                return _parameter;
            }
            set
            {
                _parameter = value;
            }
        }
        private string _userAccount = null;
        /// <summary>
        /// 目前使用者的帳號
        /// </summary>
        public string UserAccount
        {
            get
            {
                return _userAccount;
            }
            set
            {
                _userAccount = value;
            }
        }
        #endregion

        /// <summary>
        /// 返回有Parameter計算的來的值
        /// 注意當else if多於10個時建議再仿照此類另建一個實作類別,配置中配成新實現的類名即可
        /// </summary>
        /// <returns></returns>
        public object GetValue()
        {
            if (String.IsNullOrEmpty(Parameter))
            {
                return null;
            }
            #region 自訂處理
            else if ("getdate".Equals(Parameter, StringComparison.CurrentCultureIgnoreCase))
            {
                return DateTime.Today.ToString();
            }
            #endregion
            else
            {
                return null;
            }
        }

    }
}

歡迎訪問:http://121.18.78.216 適易查詢分析、工作流程、內容管理及專案管理示範平台

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.