使用依赖注入实例化类

时间:2017-05-15 13:21:40

标签: dependency-injection asp.net-core-mvc

我正在尝试将HTML视图用于string rendering class i found online。它被称为PDFRender atm,因此它将被用于它。我被告知它使用依赖注入设置它应该开箱即用。

我不知道如何实例化它。因为依赖项应该通过构造函数注入。

我的类构造函数看起来像这样

      public PdfRender(IRazorViewEngine viewEngine, ITempDataProvider tempDataProvider, IServiceProvider serviceProvider)
    {
        _viewEngine = viewEngine;
        _tempDataProvider = tempDataProvider;
        _serviceProvider = serviceProvider;

    }

我在启动类ConfigureMetod()中设置了这个

     // Set up Report PDF html renderer 
        services.AddScoped<PdfRender, PdfRender>();

现在我在我的代码中尝试这个(在查看链接示例之后)

            PdfRender pdfRender;
        string iWantToBetml = pdfRender.ModelToHTML(inspection);

但我得到一个错误(当然)说我不能使用未分配的变量。我想我不明白DI应该如何使用。我假设这个想法是给出默认的viewEngine,dataProvider和serviceProviders。

1 个答案:

答案 0 :(得分:0)

您只需要在控制器的构造函数中添加PdfRender参数:

  public PdfRender(PdfRender pdfRender, IRazorViewEngine viewEngine, ITempDataProvider tempDataProvider, IServiceProvider serviceProvider)
   {
    _pdfRender = pdfRender;
    _viewEngine = viewEngine;
    _tempDataProvider = tempDataProvider;
    _serviceProvider = serviceProvider;
    }

然后您可以在该控制器上的实例方法中使用

  public SomeMethod(){
      string iWantToBetml = _pdfRender.ModelToHTML(inspection);
  }

请注意,在您的控制器构造函数中,您不一定需要指定所有这些参数,只需指定类所需的参数,然后将从DI容器中注入这些参数,前提是它们的类型已经注册了DI容器启动时。