架构之反射实现源代码(不知道要干什么确需要知道能干什么)
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 适易查询分析、工作流、内容管理及项目管理演示平台
介绍下自己的实现思路和代码:
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 适易查询分析、工作流、内容管理及项目管理演示平台
相关文章推荐
- 今天无意中发现JavaBean类基本都要求实现了Serializable接口,以前只是知道序列化以后,可以通过io流的方式将对象序列化和反序列化,进行存取,但不知道为什么需要序列化,今天总结一下
- 抱歉,没分了!!!请教linux下,用C/C++编程,如何知道我要实现某一功能需要用到什么函数
- 系统架构选型你需要知道什么
- 抱歉,没分了!!!请教linux下,用C/C++编程,如何知道我要实现某一功能需要用到什么函数
- 中国传统日历 在编程中如何实现 需要注意什么
- 你知道了Flex能干什么后,你还应该知道 Silverlight 能干什么
- 淘宝网采用什么技术架构来实现网站高负载的
- 淘宝网和铁道部订票网站采用什么技术架构来实现网站高负载的呢
- C#--[反射]如何知道一个类都实现了哪些接口和从那个类继承
- JNI实例(应该包含了所有大家需要知道的源代码)
- 用什么技术架构来实现网站高负载
- SEO需要知道什么
- AWS正式把KVM投入使用 你需要知道些什么?
- 淘宝网采用什么技术架构来实现网站高负载的
- 【虫师--系列01】在做性能测试之前需要知道什么
- 实现ERP系统需要什么人才
- Unix 网络编程(二)- 你需要知道的传输层协议实现细节。
- java反射详解---具体代码操作看看反射都能干些什么
- 在做性能测试之后需要知道些什么
- 应用程序商店更新:你需要知道什么