C# 无法从根提供程序解析作用域服务Microsoft.AspNetCore.Mvc.ViewFeatures.Internal.IViewBufferScope
我试图在我的ASP.NET Core 2.0 web应用程序中使用此示例从视图创建html电子邮件正文。但是当我运行它并且我的控制器收到ajax请求时,我会得到以下错误: 无法从根提供程序解析作用域服务Microsoft.AspNetCore.Mvc.ViewFeatures.Internal.IViewBufferScopeC# 无法从根提供程序解析作用域服务Microsoft.AspNetCore.Mvc.ViewFeatures.Internal.IViewBufferScope,c#,asp.net-core,asp.net-core-2.0,C#,Asp.net Core,Asp.net Core 2.0,我试图在我的ASP.NET Core 2.0 web应用程序中使用此示例从视图创建html电子邮件正文。但是当我运行它并且我的控制器收到ajax请求时,我会得到以下错误: 无法从根提供程序解析作用域服务Microsoft.AspNetCore.Mvc.ViewFeatures.Internal.IViewBufferScope 它可能来自于解决中的依赖项,但我不知道如何解决此问题。好的,问题是我使用了单例服务(EmailerService)的渲染器。我将其注册更改为Scoped,现在一切正常:
它可能来自于解决中的依赖项,但我不知道如何解决此问题。好的,问题是我使用了单例服务(EmailerService)的渲染器。我将其注册更改为Scoped,现在一切正常:
services.AddScoped<IEmailer, EmailerService>();
services.addScope();
当服务作为作用域注入时,依赖类也必须作为作用域注入
不幸的是,这并不适用于所有用例。静态创建电子邮件服务时,您没有HTTP上下文
在我的例子中,我有一个由Hangfire静态执行的计划任务:
var-mailer=ServiceProviderSinleton.Instance.GetService(typeof(IEmailer))
当您需要静态上下文中的作用域服务时,有两个选项:
DryIoc.Microsoft.DependencyInjection
。()返回WebHost.CreateDefaultBuilder()
.ConfigureLogging(builder=>builder.AddSerilog(Log.Logger,dispose:true))
.UseKestrel(选项=>options.ConfigureEndpoints(配置))
.UseContentRoot(目录.GetCurrentDirectory())
.Useii整合()
.UseStartup()
.useserlog()
.UseDefaultServiceProvider(选项=>options.ValidateScopes=false)
.Build();
使用ASP.NET Core 2.1,您现在可以手动创建作用域:使用Microsoft.Extensions.DependencyInjection;使用(var scope=serviceProvider.CreateScope()){var myScopedService=scope.serviceProvider.GetService();}
@MovGP0该代码到哪里去了?我该如何强制它工作?我需要你准备的一切吗?这是一个替代品吗?@RobertBurke,我想他指的是这样的设置:。我在遇到同样的问题后实现了它,它为我解决了这个问题。