Web api控制器,其构造函数的参数为​​通用服务接口

时间:2016-04-20 13:45:23

标签: c# asp.net-web-api controller

在我的Web api项目中,我有一个控制器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?

1 个答案:

答案 0 :(得分:1)

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

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

您可能/可能不需要初始化一些可以通过

执行的构造函数
container.RegisterType<IDocumentViewerService<IViewerInformation>, DocumentViewerServce<IViewerInformation>>(
    new InjectionConstructor(...));