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?
是的,但您需要删除其中一个构造函数或告诉它要使用哪个构造函数。
container.RegisterType<IViewerInformation, HtmlViewerInformation>();
container.RegisterType<IDocumentViewerService<IViewerInformation>, DocumentViewerServce<IViewerInformation>>();
您可能/可能不需要初始化一些可以通过完成的构造函数
container.RegisterType<IDocumentViewerService<IViewerInformation>, DocumentViewerServce<IViewerInformation>>(
new InjectionConstructor(...));