Как использовать PooledDbContextFactory без DI

#c# #asp.net-core #.net-6.0 #ef-core-6.0

#c# #asp.net-core #.net-6.0 #ef-core-6.0

Вопрос:

Мы обновляем приложение до ASPNET .NET 6 и EF Core 6. Приложение запустилось без DI. В настоящее время мы создаем new DBContext () для каждого запроса. Мы хотим переключиться на внедрение DbContext, однако для всего текущего кода мы хотим использовать PooledDbContextFactory, чтобы избежать создания контекста для каждого запроса.

Мы хотели бы знать, какой должна быть эта реализация в приложении ASPNET. Мы тестируем, сохраняя пул в ThreadLocal <PooledDbContextFactory <DBContext>> объекте для повторного использования пула. Также у нас есть тест с private static readonly Lazy<PooledDbContextFactory<DBEntities>> объектом.

Это правильный способ? Нужно ли или можно ли это сделать по-другому? Правильно ли это использование?

Комментарии:

1. ThreadLocal означает, что каждый поток должен иметь свой собственный пул (я бы сказал, что это не то, что вы на самом деле хотите). Lazy означает, что создание экземпляра пула будет отложенным (т. Е. При первом вызове Lazy ).

2. Причина использования ThreadLocal заключается в том, что я не уверен, правильно ли использовать статическую PooledDbContextFactory переменную во всем приложении. Должен ли я использовать as static readOnly PooledDbContextFactory<DBCOntext> ?