我正在使用依赖项注入在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访问现有的单例而不是创建新的单例?
答案 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时重新实例化。