Считается что резолв зависимостей не в корне компановки это плохая архитектура (ServiceLocator). Но у меня возникла задача по созданию объектов в цикле внутри сервиса.
Нужно создавать ITrainRecBuilder внутри цикла foreach. Нормально ли это?
foreach (var uit in inputDatas)
{
using (var scope = _lifetimeScope.BeginLifetimeScope())
{
var trainRecBuilder = scope.Resolve<ITrainRecBuilder>();
}
}
GetCisRegSh - SingleInstance
IUsersRepository - SingleInstance
TrainRecService - InstancePerDependency
public class GetCisRegSh : GetSheduleAbstract
{
private readonly IUsersRepository _usersRepository;
private readonly TrainRecService _trainRecService;
private readonly ILifetimeScope _lifetimeScope;
public GetCisRegSh(IUsersRepository usersRepository,
TrainRecService trainRecService,
ILifetimeScope lifetimeScope)
{
_usersRepository = usersRepository;
_trainRecService = trainRecService;
_lifetimeScope = lifetimeScope;
}
protected override async Task GetaDataRxEventHandler(Task<IEnumerable<UniversalInputType>> getDataTask)
{
try
{
//ПОЛУЧЕНИЕ ДАННЫХ--------------------------------------------------------
var data = await getDataTask;
var inputDatas = data as IList<UniversalInputType> ?? data.ToList();
//СОЗДАНИЕ РАСПИСАНИЯ НА БАЗЕ ПОЛУЧЕННЫХ ДАННЫХ---------------------------
var resultList = new List<TrainTableRec>();
foreach (var uit in inputDatas)
{
using (var scope = _lifetimeScope.BeginLifetimeScope()) //РЕЗОЛВ ITrainRecBuilder
{
var trainRecBuilder = scope.Resolve<ITrainRecBuilder>();
var trainRec = trainRecBuilder
.SetExternalData(uit)
.SetDirectionByName(uit.Direction.Name)
.SetStationsById(uit.StationArrival.Id, uit.StationDeparture.Id)
.SetAllByTypeId(uit.TrainTypeByRyle.Id)
.Build();
resultList.Add(trainRec);
}
}
//ПЕРЕЗАПИСАТЬ РЕПОЗИТОРИЙ RemoteCis
_trainRecService.ReWriteAll(resultList, TrainRecRepType.RemoteCis);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
Нет, не нормально. Запрашивайте лучше Func<ITrainRecBuilder>
. Или даже Func<Owned<ITrainRecBuilder>>
если есть хоть какой-то шанс что реализация ITrainRecBuilder
будет владеть какими-нибудь ресурсами.
private readonly Func<Owned<ITrainRecBuilder>> builderFactory;
// ...
using (var scope = builderFactory())
{
var builder = scope.Value;
// ...
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть класс td в нем классы tr, они все(tr) различают по значению class, нужно получить например XML
Я пытаюсь сгенерировать динамически следующую обобщенную функцию:
Есть 4 вида анимации для меню, созданы с помощью Anitamor в Unity
В общем я программно обрабатываю документы *xlsx и из нужных полей вынимаю нужные мне данные