Почему сервис области действия создается несколько раз? - PullRequest
0 голосов
/ 15 января 2020

В моих ConfigureServices у меня есть несколько зарегистрированных служб, например:

services.AddScoped<IService1,Service1>();
services.AddScoped<IService2,Service2>();
services.AddScoped<IService3,Service3>();

Если я теперь ставлю точку останова на каждом из вышеперечисленных, я получаю ожидаемое поведение, состоящее в том, что точка останова срабатывает один раз во время запуск, как и ожидалось.

Однако теперь у меня есть еще одна зарегистрированная служба:

    services.AddScoped<IWCFService>(service =>
    {
        using (var scope = service.CreateScope())
        {
            var settingData = scope.ServiceProvider.GetRequiredService<AppSettingsDB>();
            var client = new WCFServiceClient(
                WCFServiceClient.EndpointConfiguration.WCF,
                settingData.Url);
            client.Endpoint.EndpointBehaviors.Add(
                new InspectorBehavior<IWCFServiceClient>(settingData.EnableLog));
            return client;
        };
    });

Вышеописанное работает нормально, однако, если я добавляю точку останова, я вижу ее попадание каждый раз при каждом запросе.

Я что-то упустил или ожидаемое поведение?

1 Ответ

1 голос
/ 15 января 2020

Такое поведение, как ожидаемое время жизни, означает, что объект будет инициализирован один раз за запрос. Таким образом, ваш делегат фактора реализации будет вызываться при каждом запросе к API, а не при каждом обращении к контейнеру службы (переходный процесс).

Ссылка Срок службы

Области действия

Службы с ограниченным сроком действия (AddScoped) создаются один раз для каждого запроса клиента (соединения).

...