首页logo
  •  

jonllen

金龙,目前就职于一家软件公司,从事Java和.Net信息安全开发设计。

个人档案

jonllen
心情闪存 | 给他留言
妮称:jonllen
来自:中国. 湖南. 湘潭
简述:金龙,目前就职于一家软件公司,从事Java和.Net信息安全开发设计。
博客日历

IIS虚拟目录调用主网站Bin内类库方法

分类:Asp.Net

最近全力投入IBOX的开发,先是做了一个留言的Plugins互动插件,不过发现在插件内调用主站很是麻烦,但是可用.net的反射调用IBOX的主站类库的方法:

IBOX插件是一个独立网站作为IBOX主站的Plugin虚拟目录存在,调用主站Bin内类方法非常不方便,有时候不好和主站交互,如在插件内删除留言的操作我要在IBOX的主站内记录日志,但我又不想把dao、bean重新拷贝一份到插件内来,但发现使用反射可以完美的调用IBOX的主站内任一类库方法,具体实现是通过动态加载IBOX的主站类库程序,动态创建dao、bean类实例,动态调用其方法并可获得返回值,所以IBOX插件网站也能调用IBOX的主站IBOX_DB.dll、IBOX_DL.dll内任一方法,希望下次能用到。

获取主站dao内返回查询泛型列表并绑定到GridView显示:

using System.Reflection;

public partial class Leave_Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//在当前虚拟目录内load主站Bin内类库
Assembly ass = Assembly.LoadFile(Server.MapPath("/Bin/IBOX_DL.dll"));

object obj = ass.CreateInstance("FortuneAge.IBOX_DL.FA_Log_dao");

MethodInfo m
= obj.GetType().GetMethod("funcGetLogList", new Type[] { });

object rs = m.Invoke(obj, null);

Response.Write(rs);

GridView1.DataSource
= rs;
GridView1.DataBind();

}
}

调用主站dao内添加操作日志的方法:

protected void AddLog(int eventId, string name, string description)
{
Assembly ass
= Assembly.LoadFile(Server.MapPath("/Bin/IBOX_DL.dll"));

//创建FA_Log_dao访问数据类实例
object dao = ass.CreateInstance("FortuneAge.IBOX_DL.FA_Log_dao");
Type daoType
= dao.GetType();

//创建FA_Log_bean实体类实例
object bean = ass.CreateInstance("FortuneAge.IBOX_DL.FA_Log_bean");
Type beanType
= bean.GetType();

beanType.GetProperty(
"fdLogID").SetValue(bean, daoType.GetMethod("funcNewID").Invoke(dao, null), null);

beanType.GetProperty(
"fdLogEventID").SetValue(bean, eventId, null);
beanType.GetProperty(
"fdLogEventName").SetValue(bean, name, null);
beanType.GetProperty(
"fdLogDescription").SetValue(bean, description, null);

beanType.GetProperty(
"fdLogCreateAt").SetValue(bean, DateTime.Now, null);
beanType.GetProperty(
"fdLogIP").SetValue(bean, HttpContext.Current.Request.UserHostAddress, null);
beanType.GetProperty(
"fdLogUserID").SetValue(bean, LoginUser.UserID, null);

MethodInfo m
= daoType.GetMethod("funcInsert", new Type[] { beanType });

//调用funcInsert方法
m.Invoke(dao, new object[] { bean });

}
标签:Asp.Net 反射,IBOX
  • posted@ 2009-08-26 14:45
  • update@ 2009-08-26 14:55:19
  • 阅读(10678)
  • 评论(0)

相关文章

评论
暂无任何评论。
发表评论
*必填
回复通知我
*必填

博文推荐