Вот еще один более чистый подход к использованию шаблона репозитория и внедрения зависимостей.
Сначала создайте репозиторий для хранения пользователей:
public interface IUserRepository
{
void AddUser(User user);
void EditUser(User user);
void RemoveUser(int userId);
User GetUserById(int userId);
IEnumerable<User> GetUsers();
}
Затем внедрите в память IUserRepository
:
public class InMemoryUserRepository : IUserRepository
{
private readonly List<User> _users;
public InMemoryUserRepository()
{
_users = new List<User>();
}
public void AddUser(User user)
{
_users.Add(user);
}
public void EditUser(User user)
{
var index = _users.FindIndex(u => u.Id == user.Id);
if (index < 0)
return;
_users[index] = user;
}
public void RemoveUser(int userId)
{
var index = _users.FindIndex(u => u.Id == userId);
if (index < 0)
return;
_users.RemoveAt(index);
}
public User GetUserById(int userId)
{
return _users.Find(u => u.Id == userId);
}
public IEnumerable<User> GetUsers()
{
return _users;
}
}
Затем зарегистрируйте IUserRepository
и реализацию в Startup.cs
классе в ConfigureServices
методе с временем жизни синглета:
public void ConfigureServices(IServiceCollection services)
{
.
.
.
services.AddSingletone<IUserRepository, InMemoryUserRepository>();
}
И, наконец, добавьте репозиторий в ваш контроллер:
[ApiController]
public class UsersController : ControllerBase
{
private readonly IUserRepository _userRepository;
public UsersController(IUserRepository userRepository)
{
_userRepository = userRepository;
}
[HttpGet]
public IEnumerable<User> getAllUsers()
{
_userRepository.AddUser(new User(1, "alan", "alavarez", "vasquez", new Location("mexico", "guanajuato"), "mail", "1234"));
_userRepository.AddUser(new User(1, "alan", "alavarez", "vasquez", new Location("mexico", "guanajuato"), "mail", "1234"));
_userRepository.AddUser(new User(1, "alan", "alavarez", "vasquez", new Location("mexico", "guanajuato"), "mail", "1234"));
return _userRepository.GetUsers();
}
[HttpPost]
public IActionResult AddNewUser(User user)
{
_userRepository.AddUser(user);
return Ok();
}
}