Вы можете зарегистрироваться и ввести фабричный делегат Func<string, DataWareHouseService>
. Здесь вы можете увидеть пример.
using (var dwSService = _dwhClientFactory.Invoke(companySettings.EntityConnectionstring()))
{
//Do some stuff
}
Если вы хотите иметь один экземпляр для каждого клиента, вы можете создать DwhClientResolver
класс, который может выглядеть следующим образом:
public class DwhClientResolver : IDwhClientResolver
{
private readonly ConcurrentDictionary<string, Lazy<DataWareHouseService>> _instances =
new ConcurrentDictionary<string, Lazy<DataWareHouseService>>();
public DataWareHouseService GetClient(string connStr) =>
_instances.GetOrAdd(connStr, x => new Lazy<DataWareHouseService>(() => new DataWareHouseService(x))).Value;
}
public interface IDwhClientResolver
{
DataWareHouseService GetClient(string connStr);
}
, зарегистрируйте его как синглтон и введите IDwhClientResolver
во все места, где вам нужно DataWareHouseService
.
Также вы можете проверить подход keyed-services , но использование DwhClientResolver
проще.