Web API控制器重新实例化单例服务

时间:2019-04-19 09:49:52

标签: c# asp.net-core dependency-injection .net-core

我正在使用依赖项注入在ASP.Net Core中开发Web API。 在启动过程中会启动多个单例服务。 当我尝试通过API访问这些服务时,它们将被恢复(尽管它们是单例)。因此,我再次进入Singleton Service的构造函数中,而不是使用在启动过程中已被实例化的Singleton。

Startup.cs

services.AddSingleton<IMySingleton, MySingleton>();

MyAPIController.cs

private readonly IMySingleton _mySingleton;

public MyController( IMySingleton mySingleton )
{
    this._mySingleton = mySingleton;
}

[Route("[action]")]
[HttpGet]
public bool MyMethod()
{
    try
    {
        _mySingleton.MethodOfSingleton();
        return true;
    }
    catch (Exception e)
    {
        return false;
    }
}

如何从WebAPI访问现有的单例而不是创建新的单例?

1 个答案:

答案 0 :(得分:0)

我找到了一个解决方案,而不是直接在Controller构造函数中注入单例,而应该在内部传递服务:

Startup.cs

services.AddSingleton<IMySingleton, MySingleton>();

MyAPIController.cs

private readonly MySingleton mysingleton

public MyAPIController(IEnumerable<IHostedService> services)
{
    this.mysingleton = services.FirstOrDefault(hs => hs.GetType() == typeof(MySingleton )) as MySingleton ;
}

这样,单例MySingleton不会在每次调用Controller时重新实例化。