【发布时间】:2009-05-12 10:28:27
【问题描述】:
我想为我的应用程序构建一个灵活的报告系统。到目前为止,我脑子里只有一个概念,需要一些实施技巧。我正在使用 Crystal Reports 呈现报表,并且我知道如何动态加载报表。
现在,我们的想法是每个报告都将打包为一个单独的程序集 (.dll)。报告框架将加载每个自定义报告并通过明确定义的接口与其通信,如下所示:
public interface IReport
{
string GetTitle();
string GetDescription();
void SetParameter();
void Print();
}
此外,还会有一些基础实现(作为抽象类)来处理报表上的一些常见操作(如绑定到数据源等):
public abstract class Report
{
...
}
在每个 dll 中都会有一个具体类的实现,代表这个或那个报告:
public class CustomersReport : Report
{
...
}
现在,我必须弄清楚以下几点:
1) 如何动态定位和加载dll?
2) 如何创建具体类(CustomerReport)的实例并将其转换为 IReport 以便对其调用必要的方法?
你有没有实现过这样一个可扩展的系统?你能分享你的专业知识/代码sn-ps吗?
提前致谢。
编辑:
在调查这个问题时,我发现 Jon Skeet 在 Plug-ins and Cast Exceptions 上的文章可能会有所帮助。
【问题讨论】: