Code that previously worked correctly in ASP. NET Core 2.0:
varServices =httpcontext.requestservices;varExecutor = Services. Getrequiredservice<viewresultexecutor>();varViewengine = Services. Getrequiredservice<irazorviewengine>();varView = Viewengine.getview (NULL,"~/pages/iealert.cshtml",true)?. View;if(View! =NULL){ using(View asIDisposable) { awaitExecutor. Executeasync (ControllerContext, view, ViewData, TempData,"text/html; Charset=utf-8", $); } return NewEmptyresult ();}
The following error occurred after upgrading to ASP. NET Core 2.1:
System.InvalidOperationException:No Service for type ' Microsoft.AspNetCore.Mvc.ViewFeatures.ViewResultExecutor ' have been registered. At Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService ( IServiceProvider provider, Type servicetype) at Microsoft.extensions.dependencyinjection.serviceproviderserviceextensions.getrequiredservice[t] ( IServiceProvider provider)
View the definition of Viewresultexecutor discovery Viewresultexecutor implements the Iactionresultexecutor<viewresult> interface to view the latest source generation of ASP. Code to find such registrations:
Services. Tryaddsingleton<iactionresultexecutor<viewresult>, viewresultexecutor> ();
The original viewresultexecutor was also abstracted, so instead of the following code to solve the problem:
varServices =httpcontext.requestservices;varExecutor = Services. Getrequiredservice<iactionresultexecutor<viewresult>> () asViewresultexecutor??Throw NewArgumentNullException ("Executor");varViewengine = Services. Getrequiredservice<irazorviewengine>();varView = Viewengine.getview (NULL,"~/pages/iealert.cshtml",true)?. View;if(View! =NULL){ using(View asIDisposable) { awaitExecutor. Executeasync (ControllerContext, view, ViewData, TempData,"text/html; Charset=utf-8", $); } return NewEmptyresult ();}
Viewresultexecutor changes in ASP. NET Core 2.1