在不使用 .BuildServiceProvider 的情况下调用服务并在该方法中返回后续服务所依赖的值?

Posted

技术标签:

【中文标题】在不使用 .BuildServiceProvider 的情况下调用服务并在该方法中返回后续服务所依赖的值?【英文标题】:Call a service and return a value within that method that subsequent services depend on without using .BuildServiceProvider? 【发布时间】:2021-11-04 18:38:51 【问题描述】:

上下文:

使用 .NET 依赖注入 (.NET Core 3.1) WebHostBuilder,使用 Startup.cs 进行配置 使用 ConfigureServices(IServiceCollection services) 配置主要服务

在这个方法中,我需要像这样调用单例服务的方法...

services.AddSingleton((sp) =>

    var svc = sp.GetRequiredService<Dependency_A>();
    var setConfig = new ConfigurationDataClass(svc);
    setConfig = setConfig.CallMethod().Result;
    return setConfig;
);

//-- Need to get value stored in setConfig here somehow without using 
//-- services.BuildServiceProvider()
//-- Because it creates a whole other container which I want to avoid doing

//-- After getting setConfig.OtherData
//-- I'll use to pass other data to subsequent services that need it

不幸的是,由于现有设计结构的限制,我无法更改后面的服务从配置数据服务接收数据的方式,我仅限于找到一个可以让我避免的阻塞调用创建一个重复的容器。感谢任何建议,因为我想用尽所有可能性。

【问题讨论】:

这可能是XY problem。 当然不是。这是一个我无法改变的约束问题。要么我在 Microsoft 文档中没有找到适合此流程的某种方式,要么不幸的是 .BuildServiceProvider()。 【参考方案1】:

回答我自己的问题:解决方案只是重新组织周围的依赖服务,这样,我很高兴地说,我成功地避免了调用 .BuildServiceProvider()。耶。

【讨论】:

以上是关于在不使用 .BuildServiceProvider 的情况下调用服务并在该方法中返回后续服务所依赖的值?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不安装 Zend 框架的情况下使用 Zend 库

在不使用存储过程的情况下循环 n 次

为啥 glDrawElments() 在不使用任何着色器的情况下工作?

在不使用地图Android的情况下获取用户(纬度,经度)位置[重复]

在不使用 ForEach 循环的情况下遍历列表

如何在不使用滤镜的情况下使图像变暗? [复制]