我有一个控制器,看起来很简单,如下所示。我想对我所有的DataServices都使用依赖注入。
在数据库中,我为每个客户端提供了几个数据仓库。是否可以在不创建新实例@ DatawareHouseService的情况下注入我的运行时?我首先需要调用MainService来获得正确的连接字符串。
protected internal IMainService mainService;
public EventController(ITeamleaderMainService MainService)
{
this.mainService = MainService;
}
public async Task<HttpResponseMessage> Post([FromBody]JObject Value)
{
var companySettings = await mainService .GetCompanySettingsByGroup(Value["Account_Id"].ToObject<int>());
using (DataWareHouseService dwSService = new DataWareHouseService(companySettings.EntityConnectionstring()))
{
//Do some stuff
}
}发布于 2019-05-29 16:07:48
您可以注册和注入工厂委托Func<string, DataWareHouseService>。Here你可以看到一个例子。
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);
},将其注册为单例,并在所有需要DataWareHouseService的地方注入IDwhClientResolver。
你也可以检查keyed-services的方法,但是DwhClientResolver的用法更简单。
https://stackoverflow.com/questions/56355571
复制相似问题