Однако теперь я хочу получить доступ к службе из DI внутри метода OnConfiguring, а именно IHttpContextAccessor.
Что бы я сделал при использовании подхода «сначала код» (без частичных классов), это внедрил бы IHttpContextAccessor в конструктор DbContext, сохраните его в закрытом поле только для чтения и используйте в методе OnConfiguring.
Похоже, это также работает с частичным DbContext. Мне пришлось сделать поле обнуляемым только потому, что пустой конструктор, сгенерированный шаблоном, не назначил его, выдав предупреждение.
Моя полная реализация выглядит так:
Код: Выделить всё
// Partial DbContext generated by scaffolding
public partial class MyContext : DbContext
{
public MyContext(DbContextOptions options)
: base(options)
{
}
// Rest of the scaffolded context ...
}
// My partial DbContext
public partial class MyContext : DbContext
{
private readonly IHttpContextAccessor? _httpContextAccessor;
public MyContext(
DbContextOptions options,
IHttpContextAccessor httpContextAccessor)
: base(options)
{
_httpContextAccessor = httpContextAccessor;
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
// Use HttpContext to determine connection string
}
}
Я также видел, что в DbContext есть метод с именем GetService, но когда я попытался использовать его в OnConfiguring, я получил исключение, сообщающее, что контекст еще не полностью настроен.
Заранее спасибо.