Как Autofac обрабатывает DbContext, зарегистрированный как InstancePerLifetimeScope, когда не используется BeginLifetimeScope - PullRequest
0 голосов
/ 30 октября 2019

По ошибке я использовал InstancePerLifetimeScope для регистрации конкретного экземпляра DbContext вместо использования InstancePerApiRequest

builder.RegisterType<MyContext>().As<IMyContext>().InstancePerLifetimeScope ();

Но ни один из репозиториев, использующих IMyContext, не имеет

using(var scope1 = container.BeginLifetimeScope())
{
  ....  
}

ИТеперь есть проблемы с максимальным размером пула (100), достигнутым на сервере Asp.net Web Api

Я не могу найти в документации нигде, что происходит, если вы не используете его правильно, будет ли оно корректно удалять соединение, когдазапрос выполнен?

И я не могу воспроизвести проблему с максимальным пулом локально, поэтому не могу проверить, если изменение InstancePerApiRequest устранило проблему

1 Ответ

0 голосов
/ 30 октября 2019

В документации по автофаку Для объема запроса вы увидите, что InstancePerApiRequest на больше , чем InstancePerLifetimeScope. Пока у вас нет дочерней области действия, обе регистрации будут одинаковыми.

В вашем случае я не думаю, что ошибка Max Pool Size связана с тем, как вы регистрируете область.

Если вы хотите попробовать, вы можете создать фиктивную службу, подобную этой:

public class InstanceCounter
{
    private Int32 _counter;
    public Int32 Counter => this._counter++;
}

и посмотреть, как она используется.

...