интерфейс полиморфизма с DbContext, что такое правильный путь?интерфейс полиморфизма с DbContext, Каков правильный путь?
Есть ли более элегантный способ его реализации?
Есть ли способ получить экземпляр DbContext непосредственно в хранилище
вместо того, чтобы экземпляр DbContext в контроллере и
пройти весь путь к методу в репозиторий?
Это то, что я делаю сейчас
шаг 1 - контроллер
[Route("api/[controller]")]
public class ModulesApiController : Controller
{
private readonly ApplicationDbContext _dbContext;
private readonly ILogger _logger;
public ModulesApiController(ILoggerFactory loggerFactory, **ApplicationDbContext dbContext**)
{
_logger = loggerFactory.CreateLogger<ModulesApiController>();
_dbContext = dbContext;
}
[HttpGet]
[Route("GetModule/{module}")]
public async Task<JsonResult> GetModule(string module)
{
if (ModelState.IsValid)
{
try
{
var ListModules = new List<ImoduleBL>();
ImoduleBL obj = new HomeModuleBL();
if (module == "home-index")
{
//obj = new HomeModuleBL();
//ListModules.Add(obj as ImoduleBL);
//List<Layout> ListObj = await GetModuleService.GetModule(ListModules);
//return Json(ListObj);
}
else if (module == "shop-index")
{
obj = new ShopModuleBL();
ImoduleBL Iobj = obj as ImoduleBL;
return await GetModuleService.GetCateroy(Iobj, _dbContext);
}
else if (module == "top-bunner")
{
}
}
catch (Exception ex)
{
_logger.LogError("Failed of : GetLayOutFor - Index Module", ex);
return null;
}
}
return null;
}
}
шаг 2 - GetModuleService - Сервис
общественного класса GetModuleService { // _dbContext - передать весь путь методу в Хранилище
public static async Task<JsonResult> GetCateroy(ImoduleBL ListModules, ApplicationDbContext _dbContext)
{
return await ListModules.GetCateroy(_dbContext);
}
}
шаг 3 - ShopModuleBL - BL
public class ShopModuleBL : ImoduleBL
{
public async Task<JsonResult> GetCateroy(ApplicationDbContext _dbContext)
{
ImoduleBL ListModules;
ShopModuleRepo obj = new ShopModuleRepo();
ListModules = obj as ImoduleBL;
return await GetModuleService.GetCateroy(ListModules, _dbContext);
}
}
** шаг 4 - ShopModuleRepo - хранилище **
public class ShopModuleRepo : ImoduleBL
{
public async Task<JsonResult> GetCateroy(ApplicationDbContext _dbContext)
{
return new JsonResult(await _dbContext.Category1s.ToListAsync());
}
}
** шаг 5 - на стороне клиента - CS ** Результат перейти к угловому приложение .....
Спасибо
Благодарим за намерение IoC, конечно, очень эффективно, но с предлагаемым решением я остаюсь с той же проблемой. Я звоню в ShopModuleRepo - frome ShopModuleBL вот так: ShopModuleRepo obj = new ShopModuleRepo(); , Обратите внимание, что в constractor нет параметра, и именно поэтому я остаюсь с той же проблемой – DanielD