2017-05-15 6 views
0

Ich versuche, eine HTML-Ansicht zu string rendering class i found online zu verwenden. Es heißt PDFRender atm, weil es dafür verwendet wird. Mir wurde gesagt, dass es mit Dependency Injection eingerichtet wurde und dass es aus der Box funktionieren sollte.Instantiate-Klasse mit Abhängigkeitsinjektion

Ich bin nicht sicher, wie man es instanziieren. Da die Abhängigkeiten durch den Konstruktor injiziert werden sollen.

Meine Klasse Konstruktor so aussieht

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

    } 

Und ich stelle es in der Autostart-Klassen ConfigureMetod nach oben() wie diese

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

Nun versuchen, dies in meinem Code (nach bei der Suche Link-Beispiel)

Aber ich bekomme einen Fehler (natürlich) sagen, dass ich eine nicht zugewiesene va verwenden kann ratifizierbar. Ich denke, ich verstehe nicht, wie der DI verwendet werden soll. Ich nehme an, dass die Idee darin besteht, die standardmäßigen Module viewEngine, dataProvider und serviceProviders anzugeben.

+0

Alle DI-Abhängigkeiten müssen in StarUp selbst definiert werden, ähnlich wie services.AddScoped (). Alternativ können Sie eine Erweiterungsmethode in IServiceCollection schreiben und diese in StarUp aufrufen. –

+0

"Aber ich bekomme einen Fehler (natürlich), dass ich eine nicht zugewiesene Variable verwenden kann.". Ihr Beispiel ist unvollständig. Bitte posten Sie alle relevanten Codes. – Steven

Antwort

0

Sie brauchen nur einen PdfRender Parameter an den Konstruktor des Controllers hinzuzufügen:

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

Dann sind Sie in einer Instanzmethode auf diesem Controller

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

Beachten Sie, dass in Ihrem Controller verwenden in kann Konstruktor Sie müssen nicht unbedingt alle diese Parameter angeben, geben Sie nur die an, die die Klasse benötigt, und dann werden diese aus dem DI-Container eingefügt, sofern ihre Typen beim Start beim DI-Container registriert wurden.

Verwandte Themen