|
Multitenancy API
|
|||
---|---|---|---|
#18+
Приветствую! Разрабатываю на .net core 3.0 Api c multitenancy. В зависимости от того какой указан Host в заголовке запроса идет подключение к соответствующей базе данных. Вопрос, где в коде лучше всего выбирать подключение? Сейчас это так: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9.
workdb задан в appsetting.json. Планируется что список баз данных со строками подключения и значением host будет храниться в общей базе в таблице. Модератор: Учимся использовать тэги оформления кода - FAQ ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 16:21 |
|
Multitenancy API
|
|||
---|---|---|---|
#18+
Написать и зарегать фабрику, которая в зависимости от текущего hostname будет выбирать и возвращать нужный коннекшен или дбконтекст, а там где нужен коннекшен или дбконтекст инжектить эту фабрику. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 16:54 |
|
Multitenancy API
|
|||
---|---|---|---|
#18+
А как в ConfigureServices(IServiceCollection services) получить контекст (заголовки) запроса? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 17:06 |
|
Multitenancy API
|
|||
---|---|---|---|
#18+
в ConfigureServices нет запроса. Можно внутри метода AddScoped зарегистрировать фабрику, в которой можно будет получить IHttpContextAccessor и через него уже получить заголовки. Но лучше, конечно, оформить через отдельную фабрику, как сказано выше ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 17:15 |
|
Multitenancy API
|
|||
---|---|---|---|
#18+
Shocker.Pro в ConfigureServices нет запроса. Можно внутри метода AddScoped зарегистрировать фабрику, в которой можно будет получить IHttpContextAccessor и через него уже получить заголовки. Но лучше, конечно, оформить через отдельную фабрику, как сказано выше Есть же уже готовое: Код: c# 1.
Вообще хорошее правило - всегда использовать контекст и все что с ним связано только через инъекцию IHttpContextAccessor, а не напрямую, как, например, через свойство HttpContext контроллера или тем более через HttpContext.Current. И еще, если надо получить что-то из контекста в объекте не относящемуся к слою веб-фасада, то туда инжектить не IHttpContextAccessor, а какую-либо кастомную обертку к нему, которая уже возвращает именно то, что объекту надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 17:23 |
|
Multitenancy API
|
|||
---|---|---|---|
#18+
fkthat Shocker.Pro в ConfigureServices нет запроса. Можно внутри метода AddScoped зарегистрировать фабрику, в которой можно будет получить IHttpContextAccessor и через него уже получить заголовки. Но лучше, конечно, оформить через отдельную фабрику, как сказано выше Есть же уже готовое: Код: c# 1.
Вообще хорошее правило - всегда использовать контекст и все что с ним связано только через инъекцию IHttpContextAccessor, а не напрямую, как, например, через свойство HttpContext контроллера или тем более через HttpContext.Current. И еще, если надо получить что-то из контекста в объекте не относящемуся к слою веб-фасада, то туда инжектить не IHttpContextAccessor, а какую-либо кастомную обертку к нему, которая уже возвращает именно то, что объекту надо. +1 ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 17:59 |
|
Multitenancy API
|
|||
---|---|---|---|
#18+
Konstantin_Patrushev В зависимости от того какой указан Host в заголовке запроса идет подключение к соответствующей базе данных. Скажу больше. Сегодня нужно подключение в зависимости от Host, завтра что-то ещё. Думайте шире. И вообще, думайте. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 23:40 |
|
Multitenancy API
|
|||
---|---|---|---|
#18+
вот тут вообще разжевано https://stackify.com/writing-multitenant-asp-net-core-applications/ ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2020, 10:23 |
|
Multitenancy API
|
|||
---|---|---|---|
#18+
fkthat Shocker.Pro в ConfigureServices нет запроса. Можно внутри метода AddScoped зарегистрировать фабрику, в которой можно будет получить IHttpContextAccessor и через него уже получить заголовки. Но лучше, конечно, оформить через отдельную фабрику, как сказано выше Есть же уже готовое: Код: c# 1.
Вообще хорошее правило - всегда использовать контекст и все что с ним связано только через инъекцию IHttpContextAccessor, а не напрямую, как, например, через свойство HttpContext контроллера или тем более через HttpContext.Current. И еще, если надо получить что-то из контекста в объекте не относящемуся к слою веб-фасада, то туда инжектить не IHttpContextAccessor, а какую-либо кастомную обертку к нему, которая уже возвращает именно то, что объекту надо. Чем HttpContext плох по сравнению IHttpContextAccessor? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2020, 15:36 |
|
Multitenancy API
|
|||
---|---|---|---|
#18+
vb_sub Чем HttpContext плох по сравнению IHttpContextAccessor? Тем, что в ASP.NET Core больше нет HttpContext.Current, т.е. вы не получите доступ к HttpContext как-то иначе. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2020, 15:39 |
|
Multitenancy API
|
|||
---|---|---|---|
#18+
vb_sub Чем HttpContext плох по сравнению IHttpContextAccessor? DI, Unit Tests. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2020, 16:25 |
|
|
start [/forum/topic.php?fid=18&msg=39961763&tid=1354698]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
34ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
others: | 262ms |
total: | 393ms |
0 / 0 |