Я нахожусь на
- .net Core 3.0 web api
- токен JWT / owin
- EF Core 3
У меня есть проект с несколькими базами данных. Пользователь выбирает базу данных из списка, в форме входа. После этого я установил dbName / connectionString в утверждении «selectedDb»
В каждом контроллере у меня есть от 8 до 20 классов (менеджер), которым нужен DbContext в качестве параметра contructor => я не могу создать istance менеджеров илиdbContext в конструкторе контроллера, потому что у меня еще нет токена для входа!
Так, чтобы в каждом действии я создавал istance dbContext (токена, предоставляющего строку соединения) и istance менеджеров ... Но это означает, что янужно «копировать / вставлять» одну и ту же строку кода 3/4 в каждом действии
как я могу предоставить действительный экземпляр контекста БД? возможно, используя промежуточное программное обеспечение или пользовательский атрибут авторизации
Есть ли способ создать экземпляр dbcontext в конструкторе контроллера? (с «динамической строкой соединения», предоставленной из токена)
Некоторые примеры кода
Функция классов инициализации (избегайте копирования 16 и 3 # 92 строк каждый раз)
private DatabaseContext InitContextAndManager(string connectionString)
{
_dbContext = new DatabaseContext(connectionString);
_someManager1 = new SomeManager_1(_dbContext);
_someManager2 = new SomeManager_2(_dbContext);
_someManager3 = new SomeManager_3(_dbContext);
_someManager4 = new SomeManager_4(_dbContext);
_someManager5 = new SomeManager_5(_dbContext);
_someManager6 = new SomeManager_6(_dbContext);
_someManager7 = new SomeManager_7(_dbContext);
_someManager8 = new SomeManager_8(_dbContext);
_someManager9 = new SomeManager_9(_dbContext);
_someManager10 = new SomeManager_10(_dbContext);
_someManager11 = new SomeManager_11(_dbContext);
_someManager12 = new SomeManager_12(_dbContext);
_someManager13 = new SomeManager_13(_dbContext);
_someManager14 = new SomeManager_14(_dbContext);
_someManager15 = new SomeManager_15(_dbContext);
}
НекоторыеПример API
[Authorize]
public ActionResult Api_1()
{
var connectionString = User.Identity.GetConnectionString();
InitContextAndManager(connectionString);
//some api_1 stuff
}
[Authorize]
public ActionResult Api_2()
{
var connectionString = User.Identity.GetConnectionString();
InitContextAndManager(connectionString);
//some api_2 stuff
}
[Authorize]
public ActionResult Api_3()
{
var connectionString = User.Identity.GetConnectionString();
InitContextAndManager(connectionString);
//some api_3 stuff
}