Я хочу внедрить этот интерфейс в мои контроллеры:
public interface IDatabaseService<T>
where T : class
{
T GetItem(int id);
IEnumerable<T> GetList();
void Edit(T data);
void Add(T data);
void Remove(T data);
}
Я хочу использовать универсальный, потому что в моем проекте WebApi
у меня есть контроллеры, такие как ProjectController
, TaskController
и т. Д., И я хочуиспользовать универсальный интерфейс для каждого типа (например, IDatabaseService<Project>
, IdatabaseService<Task>
и т. д.).
Класс, который будет введен в контроллер, будет выглядеть следующим образом:
public class ProjectService : IDatabaseService<Project>
{
public ProjectService(DbContext context)
{
this.context = context;
}
private readonly DbContext context;
public Project GetItem(int id)
{
}
public IEnumerable<Project> GetList()
{
}
public void Edit(Project data)
{
}
public void Add(Project data)
{
}
public void Remove(Project data)
{
}
}
Но когда я пытаюсь ввести в мой Startup.cs
:
services.AddScoped<IDatabaseService<T>>();
Iнужно передать T
тип.
Мой вопрос: как сделать инъекцию универсальной и как правильно вводить ее в контроллер?Например:
public class ProjectController : ControllerBase
{
private readonly ProjectService projectService;
public ProjectController (IDatabaseService<Project> projectService)
{
this.projectService = projectService;
}
}
Если это будет работать?И является ли хорошей практикой создание универсального интерфейса для внедрения в контроллеры?Если нет, как это сделать лучше?