Простой инжектор: установка параметра «Стиль жизни» в Scoped не устраняет ошибку «Одноразовые временные компоненты» - PullRequest
0 голосов
/ 11 июля 2019

Я вызываю службу WCF в своем проекте веб-API и пытаюсь правильно ее зарегистрировать. В какой-то момент это работало, но я подозреваю, что обновление nuget изменило ситуацию. Теперь при проверке я получаю ошибку «Устранимый временный компонент», хотя в качестве типа регистрации я выбрал Lifestyle.Scoped.

Дополнительно в этом посте я проверил версии, и все они на одной версии. Переходный компонент зарегистрирован как переходный, но реализует однозначный

<package id="SimpleInjector" version="4.6.0" targetFramework="net472" />
<package id="SimpleInjector.Integration.WebApi" version="4.6.0" targetFramework="net472" />
<package id="SimpleInjector.Integration.WebApi.WebHost.QuickStart" version="4.6.0" targetFramework="net472" />

Вот мой код:

        public static void Initialize()
        {
            var container = new Container();

            // Lifestyle set as per recommended for API:
            // https://simpleinjector.readthedocs.io/en/latest/lifetimes.html#asyncscoped-vs-webrequest
            container.Options.DefaultScopedLifestyle = new AsyncScopedLifestyle();

            container.Options.UseFullyQualifiedTypeNames = true;

            InitializeContainer(container);

            container.RegisterWebApiControllers(GlobalConfiguration.Configuration);

            container.Verify();

            GlobalConfiguration.Configuration.DependencyResolver =
                new SimpleInjectorWebApiDependencyResolver(container);
        }


        private static void InitializeContainer(Container container)
        {
            // WCF            
            container.Register<IServices>(() => new ServiceClient("endpoint"), Lifestyle.Scoped);
        }

Исключение:

Исключение: «SimpleInjector.DiagnosticVerificationException» в SimpleInjector.dll Исключение типа SimpleInjector.DiagnosticVerificationException произошло в SimpleInjector.dll, но не было обработано в коде пользователя Конфигурация неверна. Сообщалось о следующих диагностических предупреждениях: - [Устранимый временный компонент] Контейнер зарегистрирован как временный, но реализует IDisposable. См. Свойство Error для получения подробной информации о предупреждениях. См. https://simpleinjector.org/diagnostics, как исправить проблемы и как подавить отдельные предупреждения.

Кажется, что он игнорирует Lifestyle.Scoped. Какие-нибудь мысли?

Второе исключение:

Исключение: «SimpleInjector.DiagnosticVerificationException» в SimpleInjector.dll Исключение типа SimpleInjector.DiagnosticVerificationException произошло в SimpleInjector.dll, но не было обработано в коде пользователя Конфигурация неверна. Сообщалось о следующих диагностических предупреждениях: - [Устранимый временный компонент] Контейнер зарегистрирован как временный, но реализует IDisposable. См. Свойство Error для получения подробной информации о предупреждениях. См. https://simpleinjector.org/diagnostics, как исправить проблемы и как подавить отдельные предупреждения.

...