【问题标题】:Correct way to clean up a "Pre" instance of ServiceCollection and ServiceProvider?清理 ServiceCollection 和 ServiceProvider 的“Pre”实例的正确方法?
【发布时间】:2021-09-15 22:03:53
【问题描述】:

我正在我的应用程序中实现Custom Configuration Provider

在该提供程序中,我必须进行 REST API 调用。该调用需要有效的 OAuth 2 令牌才能成功。要获得该令牌,我需要一个半复杂的类依赖树。

对于我的应用程序的其余部分,我只是使用依赖注入来获取所需的实例。但是在设置依赖注入之前调用自定义配置提供程序。

我考虑过创建一个依赖注入的“Pre”实例。像这样:

IServiceCollection services = new ServiceCollection();
// Setup the DI here
IServiceProvider serviceProvider = services.BuildServiceProvider();
var myTokenGenerator = serviceProvider.GetService<IMyTokenGenerator>();

但我已经读到,当您创建另一个 ServiceCollection 时,可能会导致问题。我想知道避免这些问题的方法。

如何正确清理 ServiceCollectionServiceProvider 的“pre-DI”实例?

(注意:似乎都没有实现 IDisposable。)

【问题讨论】:

标签: asp.net-core asp.net-core-3.1 service-provider servicecollection


【解决方案1】:

嗯,我不明白你为什么要那样做。 我可能会完全构建 Serviceprovider。

为避免检索到的服务相互影响,我将使用嵌套容器/范围,这意味着如果您检索检索相同的服务,您将获得每个容器/范围的不同实例。

希望我了解您想要实现的目标。 看 .NET Core IServiceScopeFactory.CreateScope() vs IServiceProvider.CreateScope() extension

【讨论】:

  • 在设置配置时没有构建正常的服务提供者。我需要配置来设置 ServiceCollection。我将为我解决的事情添加一个范围。这将帮助他们不碍事。我仍然希望我能确定如何正确清理。
  • 我最近遇到了一个问题,我需要来自服务提供者的一些实例,这些实例与 lamar 一起使用。我必须初始化第二个 lamar 容器(独立于主机等...)
猜你喜欢
  • 2019-05-03
  • 2021-04-23
  • 2018-06-19
  • 1970-01-01
  • 2021-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-19
相关资源
最近更新 更多