Drodzy forumowicze,
Mam następujący problemw mojej aplikacji. Aby zobrazować jak najlepiej sytuację: chciałem zaimplementować metodę, która zwróci mi listę jednostek przypisanych do pracownika. Metoda wygląda następująco:
public async Task<List<WorkplaceDetailsViewModel>> GetWorkplacesByUser()
{
var userId = await _userManager.GetCurrentUserId();
if (userId != null)
{
var workplacesIds = _workplacesUsersRepo.GetWorkplacesByUser(userId);
var listOfWorkplaces = new List<WorkplaceDetailsViewModel>();
foreach (var i in workplacesIds)
{
listOfWorkplaces.Add(_workplaceService.GetWorkplace(i));
}
return listOfWorkplaces;
}
else
{
var workplacesIds = _workplaceService.GetAllWorkplaces().Select(i => i.Id).ToList();
var listOfWorkplaces = new List<WorkplaceDetailsViewModel>();
foreach (var i in workplacesIds)
{
listOfWorkplaces.Add(_workplaceService.GetWorkplace(i));
}
return listOfWorkplaces;
}
}
Po jej zaimplementowaniu otrzymuję następujący ex:
InvalidOperationException: A circular dependency was detected for the service of type 'Application.Interfaces.IUserManager'.
Application.Interfaces.IUserManager(Application.Services.UserManagerService) -> Application.Interfaces.IWorkplacesUsersService(Application.Services.WorkplacesUsersServices) -> Application.Interfaces.IUserManager
Rozumiem, że chodzi tutaj o to, że w serwisie X mam instancję serwisu Y, a z kolei w serwisie Y w konstruktorze mam utworzoną instancję serwisu X tak?
No i nasuwa się tutaj moje pierwsze pytanie - bo co jeśli akurat w serwisie Y, potrzebuję wykonać metodę z serwisu X? Dokładnie chodzi tutaj o "GetCurrentUserId()
".
**I drugie pytanie, załóżmy że mam serwis A, który w konstruktorze zawiera instancję userManagera (.netowe Identity), potrzebuję w serwisie B dostać id obecnie zalogowanego użytkownika. No i teraz - co jest lepszym podejściem:
- dodać w konstruktorze serwisu B instancję userManagera i wywołać odpowiednią metodę,
- dodać w serwisie A metodę, która tak na prawdę wywoła tylko metodę zawartą już w Identity, a następnie z serwisu B, odwołać się do tej metody z serwisu A? **
Wybaczcie, ale może zamierzam obejść rzekę naokoło zamiast przejść przez most, dlatego pytam...