Web api控制器,具有作为通用服务接口的带参数的构造函数

本文关键字:接口 服务 构造函数 参数 控制器 api Web | 更新日期: 2024-10-24 18:19:46

在我的Webapi项目中,我有一个控制器DocumentViewerV1Controller,它的代码为:

      /// <summary>
    /// 
    /// </summary>
    /// <param name="documentViewerService"></param>
    public DocumentViewerV1Controller(IDocumentViewerService<HtmlViewInformation> documentViewerService)
    {
        _documentViewerHtmlService = documentViewerService;
    }
    /// <summary>
    /// 
    /// </summary>
    /// <param name="documentViewerService"></param>
    public DocumentViewerV1Controller(IDocumentViewerService<PageImage> documentViewerService)
    {
        _documentViewerImageService = documentViewerService;
    }/// <summary>
    /// Rendering Document as Html
    /// </summary>
    /// <returns></returns>
    [HttpGet]
    [Route(WebApiConfig.RootApiUri + "/v1/viewashtml/{docid}")]
    public string ViewAsHtml(string docId)
    {
        var documentInfo = new DocumentInfo { DocumentName = HostingEnvironment.MapPath("~/Uploads/") + docId };
        var response = _documentViewerHtmlService.RenderDocument(documentInfo, DocumentRenderType.Html);
        return GenerateResponse(response);
    }

当我运行我的服务时,调用并调试构造函数初始化,它没有经过使_documentViewerHtmlService为null的初始化,最终失败,返回null引用异常。

是否可以将服务接口作为IDocumentViewerService?

Web api控制器,具有作为通用服务接口的带参数的构造函数

是的,但您需要删除其中一个构造函数或告诉它要使用哪个构造函数。

container.RegisterType<IViewerInformation, HtmlViewerInformation>();
container.RegisterType<IDocumentViewerService<IViewerInformation>, DocumentViewerServce<IViewerInformation>>();

您可能/可能不需要初始化一些可以通过完成的构造函数

container.RegisterType<IDocumentViewerService<IViewerInformation>, DocumentViewerServce<IViewerInformation>>(
    new InjectionConstructor(...));