3

をレンダリングするために、ControllerContext を注入する必要がある pdf を作成するために必要なサービス クラスがあります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 への参照を持つことはできません。

プロバイダー、ファクトリー、リゾルバーなどを見てきましたが、適切な解決策が見つかりませんでした。

どんな助けでも大歓迎です!乾杯

4

2 に答える 2