【问题标题】:Bind service after ConfigureServices has completed [closed]ConfigureServices 完成后绑定服务[关闭]
【发布时间】:2017-08-15 09:51:47
【问题描述】:

我在 Startup.cs 的 ConfigureServices 方法中遇到问题,我需要 GET (serviceProvider.GetService) 我绑定的服务,从绑定的服务运行方法 (CreateEndpoint),返回一个对象,然后将该对象绑定为单例。

如果我在 ConfigureServices 中运行 services.BuildServiceProvider() 两次,该应用似乎只使用第一次调用的服务提供者,所以第二次调用不包含我的有界单例对象。

或者,有没有办法让我在 ConfigureServices 完成后绑定服务?我目前设置的方式是,CreateEndpoint 方法在 Startup 的 Configure 方法中触发。唯一的问题是我实际上无法在 ConfigureServices 方法之外绑定单例对象。

【问题讨论】:

  • 显示minimal reproducible example,可用于重现问题以及所需行为。
  • @NKosi 我不同意这个问题是题外话。期望的行为非常明确。它是可以回答的,并且有一个非常具体的答案。

标签: asp.net-mvc dependency-injection asp.net-core


【解决方案1】:

你想要这样的东西:

services.AddTransient<EndpointFactory>();
services.AddTransient(container => container.GetService<EndpointFactory>().CreateEndpoint());

如果您需要先解析其他服务,则必须将函数传递给您的注册调用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多