insighter
@insighter
-First time? - Huh? (C#, React, JS)

Как организовать такой роутинг?

Хочу организовать роутинг например такого запроса:
www.myname.ru/services/{dbId}/api/data/get?id=...

Понятно, что после api идет пачка контроллеров и надо бы реализовать централизованную обработку параметра "dbId". По сути это идентификатор схемы данных с которой будут работать контроллеры. С API могут работать разные компании и у каждой данные хранятся в собственной схеме.

[ApiController]
    [Route("services/{dbId}/api/[controller]")]
    public class DataController : ControllerBase
    {
        protected MyDbContext Dbx { get; private set; }

        public DataController(MyDbContext dbx)
        {
            Dbx = dbx;
	    // здесь ничего не известно о структуре запроса, а хочется инициализировать dbx
        }


        [HttpGet]
	[Route("get")]
        public async Task<IActionResult> Get([FromRoute]string dbId, string id)
        {
		...


Как получить dbId в методах контроллера мне понятно, все работает. Но как я могу получить dbId в конструкторе, чтобы прописать его в DbContext.

Может кто даст общий совет, как лучше организовать API, которое работает в подобном изолированном друг от друга контексте (/services/{dbId}/...).
  • Вопрос задан
  • 93 просмотра
Пригласить эксперта
Ответы на вопрос 1
sarapinit
@sarapinit Куратор тега C#
Точу водой камень
На мой взгляд, это тот случай, когда нужно отказаться от внедрения зависимостей и рулить созданием и временем жизни DbContext самостоятельно. Можно создать фабрику, которая дублирование кода по созданию контекста в зависимости от dbId и ее получать конструктор в местах где это необходимо. Но вот освобождать контекст нужно будет руками.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы