C#IServiceScopeFactory-同一类型的多个单例实例



我有一个应用程序,它使用外部库为Db Provider创建客户端实例。

这个依赖项作为Singleton添加到我的应用程序DI容器中,并有一些参数从我的应用传递到库的初始化构造函数。

我需要创建另一个具有不同论点的客户端,理论上这能实现吗?据我所知,我必须向DI添加另一个具有不同参数的单例类(我使用的是.NET核心IServiceScopeFactory(,但如果两者都具有相同的类型,我如何解决我需要的一个。

您可以将Provider Factory注册为singleton然后使用它来创建您的客户端

public class DBProviderFactory
{
private static ClientType _clientA { get; set; }
private static ClientType _clientB { get; set; }
private static readonly object ThreadLock = new object();
public ClientType GetInstanceA()
{
if (_clientA != null)
{
return _clientA;
}
lock (ThreadLock)
{
_clientA = new DbInitializer("1", "2");
}
return _clientA;
}
public ClientType GetInstanceB()
{
if (_clientB != null)
{
return _clientA;
}
lock (ThreadLock)
{
_clientB = new DbInitializer("3", "4");
}
return _clientB;
}
}

首先注册

services.AddSingleton<DBProviderFactory>();

然后在下使用

public class service
{
private ClientType client { get; set; }
public service(DBProviderFactory dBProviderFactory)
{
client = dBProviderFactory.GetInstanceA();
}
}

最新更新