【发布时间】:2013-05-23 07:44:51
【问题描述】:
我有一个创建 pdf 所需的服务类,它需要注入 ControllerContext 以呈现html => pdf。
这个服务是通过一个中间层调用的,它没有引用 web/mvc 项目。这很好,因为 ninject 完成了所有需要的服务注入等。
这就是服务的样子(为这些目的而简化)
public class PdfCreatorService : AbstractUrlBasedPdfCreatorService
{
[Inject]
public ControllerContext ControllerContext { get; set; }
public override byte[] CreateReport(int reportId)
{
var result = new PdfController().CreateReport(reportId);
using (var it = new ResponseCapture(ControllerContext.RequestContext))
{
result.ExecuteResult(ControllerContext);
return it.ReadAllContents();
}
}
}
这是简化的调用堆栈:
Web.HomeController.SendEmailWithPdf(int id) 调用:
MiddleTier.BusinessLogic.SendEmailWithPdf(int id) 调用:
Web.Services.PdfCreatorService.CreateReport(int id)
Ninject 正在到达 PdfCreatorService,没问题,但是:我需要以某种方式将 ControllerContext 从 HomeController(通过中间层)转发到 PdfCreatorService。 而中间层不能有任何对 ControllerContext 的引用。
我查看了提供者、工厂、解析器等。 但找不到合适的解决方案。
感谢任何帮助! 干杯
【问题讨论】:
-
您是从控制器调用 PdfCreatorService 吗?如果是这样,为什么不将控制器上下文作为参数传递。或者从设计的角度来看甚至更好,提取您需要的信息并将其作为简单参数传递给您的 PdfCreatorService。
-
@Kenneth 不,如堆栈中所示,我没有直接从控制器调用 PdfCreatorService。你能解释一下,我如何使用一个简单的参数来传递 ControllerContext ?
-
那么您是从 Web 服务访问它吗?如果是这样,由于您没有调用控制器,因此也不会有可用的控制器上下文。
-
我正在调用控制器 -> 中间层 -> pdfService 但是中间层不能有对 ControllerContext 的引用。
标签: c# asp.net-mvc asp.net-mvc-4 ninject ninject-2