Здравствуйте!
Есть генерик интерфейс :
public interface IOybek<T>
where T : class
{
T GetById(int id);
}
Для начала сделал чтобы по айдишнику показывал данные из базы данных.
имплементация интерфейса
public class Oybek<T> : IOybek<T>
where T : class
{
protected DbSet<T> DbSet;
public Oybek(MyContext context)
{
DbSet = context.Set<T>();
}
public T GetById(int id)
{
return DbSet.Find(id);
}
}
Есть следующие сущности
public class User
{
public User()
{
this.Accounts = new HashSet<Account>();
}
public int Id { get; set; }
public string TelegramUserId { get; set; } = null!;
public virtual ICollection<Account> Accounts { get; set; }
}
public class MyItems
{
public int Id { get; set; }
public string MarketHashName { get; set; } = null!;
public int AccountId { get; set; }
public Account? Account { get; set; }
}
public class Account
{
public Account()
{
this.Items = new HashSet<MyItems>();
}
public int Id { get; set; }
public string SteamId { get; set; } = null!;
public User? User { get; set; }
public virtual ICollection<MyItems> Items { get; set; }
}
а вот апи контроллер.
[ApiController]
[Route("[controller]")]
public class GetByIdController : ControllerBase
{
private readonly IOybek<User> _rep;
public GetByIdController(IOybek<User> rep)
{
_rep = rep;
}
[HttpGet]
[Route("{id}")]
public async Task<User> GetUser(int id)
{
return _rep.GetById(id);
}
}
смотрите, в апи контроллере когда я делаю DI я пишу
private readonly IOybek _rep;
а когда делал
Т то выходила ошибка.
А делать DI вот таким образом нельзя что ли ??==>
private readonly IOybek<T> _rep;
public GetByIdController(IOybek<T> rep)
{
_rep = rep;
}
Получается, в котроллере который я выше написал мне можно только работать с сущностью User?? Например, если нужны данные из сущности MyItems я должен буду создать отдельный контроллер и делать DI вот таким образом ??
private readonly IOybek<MyItems> _rep;
public GetByIdController(IOybek<MyItems> rep)
{
_rep = rep;
}