如何解决c#使用反射的动态实例化
| 我正在导出报告,并且我注意到我为每个报告复制了大量代码。我想将其放在一个单独的类中的方法中,但是我不确定经过一些研究后如何进行实例化。我的代码如下: ActiveReport rpt = new Reports.rptContractListing_Merchant();
rpt.Run();
try
{
rpt.Run(false);
}
catch (DataDynamics.ActiveReports.ReportException eRunReport)
{
// Failure running report,just report the error to the user:
Response.Clear();
Response.Write(\"<h1>Error running report:</h1>\");
Response.Write(eRunReport.ToString());
return;
}
XlsExport xls = new XlsExport();
xls.MinColumnWidth = (float)0.5;
xls.Export(rpt.Document,m_stream);
m_stream.Position = 0;
Response.ContentType = \"application/vnd.ms-excel\";
Response.AddHeader(\"content-disposition\",\"inline; filename=ContractListing_Merchant.xls\");
System.IO.MemoryStream m_stream = new System.IO.MemoryStream();
Response.BinaryWrite(m_stream.ToArray());
Response.End();
这是我不确定反射的部分:
ActiveReport rpt = new Reports.rptContractListing_Merchant();
另一个例子:
ActiveReport rpt = new Reports.rptContractDetails();
try
{
rpt.Run(false);
}
catch (DataDynamics.ActiveReports.ReportException eRunReport)
{
// Failure running report,just report the error to the user:
Response.Clear();
Response.Write(\"<h1>Error running report:</h1>\");
Response.Write(eRunReport.ToString());
return;
}
Response.ContentType = \"application/pdf\";
Response.AddHeader(\"content-disposition\",\"inline; filename=ContractDetails.pdf\");
PdfExport pdf = new PdfExport();
System.IO.MemoryStream memStream = new System.IO.MemoryStream();
pdf.Export(rpt.Document,memStream);
Response.BinaryWrite(memStream.ToArray());
Response.End();
解决方法
我认为“ 3”是您要生成的报告类型的一种方式
,您有很多选择,其中许多甚至不需要反思。
如果可以保证所有报表类都具有\“ default \”构造函数(不带参数),则可以使用泛型并指定泛型类型必须具有默认构造函数。然后,您可以说
new T()
。
否则,您可以使用依赖项注入来基于给定类型创建报告,或者可以让您的方法将Report本身作为参数(必须由调用方法提供),并用其余的重复项来占据自身码。
,我只是将rpt对象传递给其中包含代码的方法。有效。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。