У меня есть класс обслуживания, который необходим для создания pdf-файла, который требуется для ввода ControllerContext, чтобы отобразить html => pdf
. Эта услуга вызывается через средний уровень, который не имеет ссылки на проект web/mvc. это хорошо, так как Ninject делает все необходимые инъекции услуг и т.д. Это то, что служба выглядит (упрощенный для этих целей)Контекст Bind Controller с 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 (интермедиат идентификатор) вызывает:
MiddleTier.BusinessLogic.SendEmailWithPdf (интермедиат идентификатор) вызывает:
Web.Services.PdfCreatorService.CreateReport (интермедиат идентификатор)
Ninject достигает PdfCreatorService, никаких проблем, но: мне нужно как-то переслать ControllerContext с HomeController (через средний уровень) в PdfCreatorService. Пока средний уровень не может ссылаться на ControllerContext.
Я смотрел Провайдеры, Заводы, Резольвер и т. Д. Но не смог найти правильное решение.
Любая помощь приветствуется! Cheers
Вы звоните в PdfCreatorService из своего контроллера? Если это так, почему бы вам просто не передать параметр controlcontext в качестве параметра. Или даже лучше с точки зрения дизайна, извлеките необходимую информацию и передайте ее в качестве простых параметров для вашего PdfCreatorService. – Kenneth
@ Kenneth no, как показано в стеке, я не вызываю PdfCreatorService непосредственно из контроллера. Можете ли вы объяснить, как использовать простой параметр для передачи ControllerContext? – Sam7
Итак, вы получаете это от веб-службы? Если это так, так как вы не вызываете контроллер, не будет также доступ к содержимому контроллера. – Kenneth