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

本文介绍了一种利用C#中的反射技术来实现动态配置的方法。通过定义接口、反射判断类是否实现该接口,并提供了配置实现类的具体示例。这种方法可以有效解决开发过程中对配置灵活性的需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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))
{
returnDateTime.Today.ToString();
}
#endregion
else
{
return null;
}
}

}
}

欢迎访问:http://121.18.78.216 适易查询分析、工作流、内容管理及项目管理演示平台

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值