- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在 2.0 中遇到错误,我以前在 .Net Core 1.1 中没有遇到过。
无法使用单例“ArithmosDaily.IHangfireJobSchedulerService”中的作用域服务“ArithmosDaily.Data.ArithmosContext”。
我正在使用 Hangfire,我需要它来访问我的数据库(因此我通过 DI 注入(inject)我的上下文)以按计划使用来自 API 的一些数据更新数据库。所以看起来 DbContext 被实例化为 Scoped,我将我的 Hangfire 服务设置为 Singleton。在 Core 1.1 中,没有检查嵌套在 Singleton 中的 Scoped。我知道这个概念是有效的,因为我将它从我的另一个 Core 1.1 项目中剥离出来,并将 Context 嵌套在我的 Singleton 服务中工作正常。 (令我恼火的是,微软觉得有必要控制我,只是因为我可能做坏事)。
因此,我将我的 Hangfire 服务从 Singleton 更改为 Scoped,希望因为我的 DbContext 显然是 Scoped,所以 Scoped inside Scoped 会很好,但我得到了这个错误:无法解析范围服务'ArithmosDaily.IHangfireJobSchedulerService' 来自根提供者。
我仍然不知道那是什么意思。
经过一些挖掘,我发现了帖子底部的两个链接(到目前为止,我只能找到这些链接)。我尝试按照第一个链接中的建议在我的 Startup 中设置 services.BuildServiceProvider(false);
,但这并没有改变我的 Configure 中的任何内容:我在设置服务时仍然遇到错误。
我完全被难住了,不知道还能尝试什么。也许我的代码放错地方了?我不确定。
这是我的启动和配置代码:
public void ConfigureServices(IServiceCollection services)
{
services.BuildServiceProvider(false);
string conn = Configuration.GetConnectionString("Arithmos");
services.AddDbContext<ArithmosContext>(options => options.UseSqlite(conn));
services.AddMvc();
services.AddHangfire(x => x.UseSQLiteStorage(conn));
services.AddScoped<IHangfireJobSchedulerService, HangfireJobSchedulerService>();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, IApplicationLifetime lifetime)
{
lifetime.ApplicationStarted.Register(OnStartup);
lifetime.ApplicationStopping.Register(OnShutdown);
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseBrowserLink();
}
else
app.UseExceptionHandler("/Error");
app.UseStaticFiles();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller}/{action=Index}/{id?}");
});
app.UseHangfireServer();
app.UseHangfireDashboard(options: new DashboardOptions
{
Authorization = new[] { new HangfireAuthorizationFilter() }
});
jobSchedulerService = app.ApplicationServices.GetRequiredService<IHangfireJobSchedulerService>();
}
我遇到过这些问题,但它们对我帮助不大:
ASP.Net Core 2 ServiceProviderOptions.ValidateScopes Property
最佳答案
In Core 1.1, there was no check for Scoped nested inside a Singleton.
有,实际上。但默认情况下未启用它。这是 IMO 在 .NET Core 1 中的一个错误。
the Context inside my Singleton service works fine.
这样的事情是相当异常(exception)的,这就是为什么默认阻止它是一件好事。例如,DbContext 不是线程安全的,在应用程序的持续时间内保持事件状态几乎在所有情况下都会导致并发错误,这些错误只会在生产中运行时出现,当多个请求同时进入时。
如果这不会导致您的情况出现错误,那是异常(exception)情况,而不是规则。
Cannot resolve scoped service 'ArithmosDaily.IHangfireJobSchedulerService' from root provider. I still have no clue what that one even means.
那个错误确实很困惑。这意味着,对于 .NET Core 容器,您应该始终从 IServiceScope.ServiceProvider
(或注入(inject)的 IServiceProvider)解析,但绝不能从根
IServiceProvider。在 ASP.NET Core 请求中运行时,框架将代表您自动调用
ServiceProviderServiceExtensions.CreateScope`,并使用该作用域为您解析 Controller 和其他服务。在 Web 请求之外运行时,您可能需要自己创建一个范围。
关于c# - .NET Core Scoped 通过 DI 在 Singleton 中调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50362622/
是否有一个意思是“不是单例”的名字? 最佳答案 CaSTLe Windsor 使用术语“ transient ”来描述所有非单例对象。 不过,我个人更喜欢“非单例”一词。 关于singleton -
我有很多(抽象)工厂,它们通常被实现为单例。 通常是为了方便,不必让他们通过那些真正与使用或了解这些工厂无关的层。 大多数时候我只需要在启动时决定其余代码程序的工厂实现,也许通过一些配置 它看起来例如
我有几个关卡都使用相同的音效。我没有在每个级别都使用相同的代码,而是将所有声音合并到一个单例类中。但是,当我从其他类运行该方法时,将其置于单例中不会播放任何声音。我没有错误或警告。 当我在每个类中使用
我应该使用 EJB-@Singleton (javax.ejb.Singleton) 进行统计或监控,还是将统计信息缓存在公共(public) @SessionScoped-Bean 中会更好?为了澄
我有这个单例类: public class Utente { private static readonly Lazy lazy = new Lazy(() => new Utente
我的 iOS 应用程序对 Web 服务做了很多不同的请求。每个请求都是对 ConnectionManager 对象的方法的调用。当响应从 Web 服务到达时,将调用委托(delegate)的方法来通知
这个问题已经有答案了: 已关闭11 年前。 Possible Duplicate: cracking singleton with other ways 任何人都可以告诉我 Singleton不能用作
这个问题已经有答案了: 已关闭11 年前。 Possible Duplicate: cracking singleton with other ways 任何人都可以告诉我 Singleton不能用作
做用 @Singleton 注释的类必须遵循 Singleton design pattern ? 我的猜测是他们没有:没有必要有私有(private)构造函数和 static .instance()
我想提供 Java 中可用的内置单例类列表以及使它们成为单例的原因。 对于 E.G. java.lang.Runtime 原因:因为整个 Java 应用程序只能有一个运行时环境。 java.awt.T
我有一个 Python 3 类,它目前是使用 @singleton 装饰器定义的单例,但有时它需要不是是单例。 问题:是否可以在实例化类的对象时传递一个参数,由该参数决定该类是单例还是非单例? 我正试
我正在使用 get_it 包,你有两个选项来注册单例,懒惰和我猜是“常规”(分别是 GetIt.instance.registerLazySingleton 和 GetIt.instance.regi
单例模式在 Spring 容器级别维护实例,而单例设计模式在类加载器级别维护实例。 还有其他区别吗? 其次,我仍然认为上述理由不成立。事实上,一个应用程序上下文/容器仅加载在一个类加载器中。因此从技术
这个问题在这里已经有了答案: What is an undefined reference/unresolved external symbol error and how do I fix it?
在 Guice 中,有什么区别: // Inside your AbstractModule subclass: @Override public void configure() { bin
我使用 pthread TLS 实现了一种“线程本地单例”,我想知道在这种情况下我如何(以及何时)可以删除 pthread_key_t,因为就像现在一样,TLS key 使用的内存永远不会空闲' d。
如何从 @Singleton 组件返回非单例对象? 例如我有: ApplicationComponent.kt @Singleton @Component(modules = [Application
我正在学习 Dagger 2,我注意到在某些示例中,模块方法中有一个 @Singleton,而组件方法中有其他 @Singleton?模块方法和组件方法上的 @Singleton 批注有什么区别,究竟
我的代码中需要一个单例。我读了 Jon Skeet 的 page在单例上并根据他的推荐选择了这个模型(#4): public sealed class Singleton { private
我正在尝试使用 label2rgb 生成 RGB 标签切片并使用它来更新 RGB 体积,如下所示: labelRGB_slice=label2rgb(handles.label(:,:,han
我是一名优秀的程序员,十分优秀!