Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Can';t从作用域服务访问启动中的方法_C#_.net_Entity Framework - Fatal编程技术网

C# Can';t从作用域服务访问启动中的方法

C# Can';t从作用域服务访问启动中的方法,c#,.net,entity-framework,C#,.net,Entity Framework,我有一个基本接口和类,已在“ConfigureServices”中注册为作用域服务 例如: services.AddScoped<ICachingDataManager, CachingDataManager>(); services.addScope(); 在这个类CachingDataManager中,我从EF注入了一个DbContext。然后在“ConfigureServices”中注册此上下文。没什么特别的 services.AddDbContext<PhoneCo

我有一个基本接口和类,已在“ConfigureServices”中注册为作用域服务

例如:

services.AddScoped<ICachingDataManager, CachingDataManager>();
services.addScope();
在这个类CachingDataManager中,我从EF注入了一个DbContext。然后在“ConfigureServices”中注册此上下文。没什么特别的

services.AddDbContext<PhoneContext>();
services.AddDbContext();
现在我想在启动时从CachingDataManager运行一个方法(它初始化缓存以提供一些上下文)。因此,在我运行的“配置”部分中:

app.ApplicationServices.GetRequiredService<ICachingDataManager>().Initialize();
app.ApplicationServices.GetRequiredService().Initialize();
在这里,它一直失败,因为它是一个作用域服务,如果我从一个单例执行一个方法,那么它执行起来没有任何问题


有什么见解吗?

那么你期待什么呢?如果它是一个作用域服务-您需要在作用域开始时对其进行初始化(例如在构造函数中),那么在启动时对其进行一次初始化没有多大意义?@Evk当应用程序启动时,我想对其自身进行初始化,然后在应用程序的生命周期中进一步使用作用域服务来更新自身。但它必须在Startupbook中进行自我初始化,但如果有许多此服务的实例,它如何能够进行一次自我初始化?或者这是一种对所有实例都有效的静态初始化?但将其作为该服务的实例方法是很奇怪的。@Evk作用域服务格式化数据并将其传递给单例缓存服务不能说我喜欢该设计,但我想您可以使用(var scope=app.ApplicationServices.CreateScope()){scope.ServiceProvider.GetRequiredService().Initialize来使用
();}