运行时编译执行代码的又一应用, 仅供娱乐
2008-05-06 23:12 xiaosonl 阅读(1905) 评论(6) 收藏 举报 之前写的那篇<<一个极其简单的在线C#IDE例子>>, 貌似很合大众胃口.这次我又想到一个种运行时编译执行代码的应用, 不过比较简单就是.
比如Math.dll程序集有个计算器的类
namespace Account
{
/// <summary>
/// 计算器
/// </summary>
public class Calcualtor
{
public int Add(int x, int y)
{
return x + y;
}
}
}
现在我们的程序当中, 要使用计算器的功能.但是我们还并没有具体的Calcualtor类, 所以我们用一个接口来表示:
/// <summary>
/// 计算器接口
/// </summary>
public interface ICalculator
{
int Add(int x, int y);
}
在依赖注入中,经常会这么做.但是,这时候的Calcualtor类并没有实现ICalcualtor这个接口.怎么办?看测试:
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace TestDynamicObjectPool
{
/// <summary>
/// 计算器接口
/// </summary>
public interface ICalculator
{
int Add(int x, int y);
}
[TestClass()]
public class DynamicObjectPoolTest
{
[TestMethod()]
public void GetInstanceTest()
{
//参数按顺序为:目标类程序集,目标类Namespace,目标类名,所依赖的其它程序集(这里为测试自身程序集)
ICalculator proxy = DynamicObject.GetObject<ICalculator>("Account", "Account", "Calcualtor", "TestDynamicObjectPool.dll");
Assert.AreEqual(2, proxy.Add(1, 1));
}
}
}
使用ICalculator就可以调用到Calculator类的方法实现了.
实现的原理很土很简单, 就是动态生成一个代理类:
using System;
using System.Collections.Generic;
namespace DynamicProxy
{
public class CalcualtorProxy : Account.Calcualtor, TestDynamicObjectPool.ICalcualtor { }
} 这种方法的拘束很大, 比如目标类必需可以被继承,要有无参构造函数等.这里纯粹是说个想法, 仅供娱乐.
完整代码下载 : DynamicObjectPool.rar
--------------------------个人签名的分割线--------------------------------------
我的个人综合博客:http://www.xiaosonl.com


浙公网安备 33010602011771号