您的位置:首页 > 运维架构 > 网站架构

架构之反射实现源代码(不知道要干什么确需要知道能干什么)

2011-10-31 11:54 405 查看
做过架构的朋友或许都有过不知道开发人员要干什么确需要知道开发人员能干什么的困惑,估计大家的解决思路应该也会往一处想-反射

介绍下自己的实现思路和代码:

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 适易查询分析、工作流、内容管理及项目管理演示平台
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: