Проблема в том, что вы не зарегистрировали свой класс Season
в контейнере DI, поэтому при получении запроса в этом контроллере никто не знает, как создать экземпляр TabsController
, потому что он не знает, откуда взятьSeason
параметр.
Вы можете прочитать больше здесь: https://aspnetcore.readthedocs.io/en/stable/mvc/controllers/dependency-injection.html
Кроме этого есть два способа решить этот:
Измените GetTabs для непосредственного использования _context.Seasons
public TabsController(AwardContext context)
{
_context = context;
}
public ActionResult GetTabs(int id)
{
var tabs = _context.Tabs.Find(id);
if (tabs == null)
{
return NotFound();
}
var season = _context.Seasons.FirstOrDefault(tabs.SeasonId);
var result = new { tab = tabs, season = season };
return Ok(result);
}
Или вы перемещаете логику в отдельный класс (например, службу): SeasonService
, затем регистрируете это в DIконтейнер, затем вы снова используете его в TabsController
и SeasonController
.
SeasonService будет выглядеть примерно так:
public class SeasonService
{
private readonly AwardContext _context;
public SeasonService(AwardContext context)
{
_context = context;
}
public Seasons GetSingle(int? id)
{
return _context.Seasons.FirstOrDefault(x => x.Id == id);
}
}
И вам нужно зарегистрировать его в DI-контейнере: https://medium.com/volosoft/asp-net-core-dependency-injection-best-practices-tips-tricks-c6e9c67f9d96
А потомвы сможете использовать его внутри своих контроллеров:
public TabsController(TabsService tabsService, SeasonService seasonService)
{
_tabsService = tabsService;
_seasonService = seasonService;
}
public ActionResult GetTabs(int id)
{
var tabs = _tabsService.FindById(id);
if (tabs == null)
{
return NotFound();
}
var season = _seasonService.GetSingleById(tabs.SeasonId);
var result = new { tab = tabs, season = season };
return Ok(result);
}
Как видите, вам также необходимо создать TabsService и зарегистрировать его в DI-контейнере.
Вы можетеПодробнее об этом шаблоне проектирования / архитектурном подходе читайте здесь: MVCS - служба контроллера представления модели