Cannot resolve scoped service Microsoft.AspNetCore.Mvc.ViewFeatures.Internal.IViewBufferScope from root provider

社会主义新天地 提交于 2019-12-07 03:49:43

问题


I'm trying to use in my ASP.NET Core 2.0 web app this sample RazorViewEngineEmailTemplates to create an html email body from View. But when I run it and my controller gets an ajax request, I get this error:

Cannot resolve scoped service Microsoft.AspNetCore.Mvc.ViewFeatures.Internal.IViewBufferScope from root provider

It's probably coming from resolving dependencies in the RazorViewToStringRenderer class but I have no idea how to fix this.


回答1:


ok, the problem was I used renderer from a Singleton service (EmailerService). I changed its registration to Scoped and it all works now:

services.AddScoped<IEmailer, EmailerService>();



回答2:


When a service gets injected as scoped, the dependent class must also be injected as scoped.

Unfortunately, this does not work for every use case. When creating the E-Mail service statically, you don't have an HTTP Context.

In my case, I had a scheduled Task that was executed statically by Hangfire:

var mailer = ServiceProviderSinleton.Instance.GetService(typeof(IEmailer))

When you need that scoped service from a static context, you have two options:

  1. use a dependency injection framework that gives you more control over the injection context. I highly recommend DryIoc.Microsoft.DependencyInjection from NuGet. (Documentation)

  2. disable the scope validation:

return WebHost.CreateDefaultBuilder()
    .ConfigureLogging(builder => builder.AddSerilog(Log.Logger, dispose: true))
    .UseKestrel(options => options.ConfigureEndpoints(configuration))
    .UseContentRoot(Directory.GetCurrentDirectory())
    .UseIISIntegration()
    .UseStartup<TStartup>()
    .UseSerilog()
    .UseDefaultServiceProvider(options => options.ValidateScopes = false)
    .Build();


来源:https://stackoverflow.com/questions/46897963/cannot-resolve-scoped-service-microsoft-aspnetcore-mvc-viewfeatures-internal-ivi

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!