Ошибка случайного индекса контейнера Unity DI вне границ - PullRequest
1 голос
/ 29 января 2020

У нас есть ASP. NET API, который получает много запросов в день, а это сотни тысяч в день. При высокой нагрузке я заметил, что около 5% запросов приведет к ошибке. Ниже приведена трассировка стека, которую мы видим для каждой из этих ошибок:

System.IndexOutOfRangeException:
   at System.Collections.Generic.Dictionary`2.Insert (mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)
   at Unity.Lifetime.HierarchicalLifetimeManager.SynchronizedSetValue (Unity.Abstractions, Version=2.3.1.0, Culture=neutral, PublicKeyToken=6d32ff45e0ccc69f)
   at Unity.Lifetime.SynchronizedLifetimeManager.SetValue (Unity.Abstractions, Version=2.3.1.0, Culture=neutral, PublicKeyToken=6d32ff45e0ccc69f)
   at Unity.ObjectBuilder.Strategies.LifetimeStrategy.PostBuildUp (Unity.Container, Version=5.3.2.0, Culture=neutral, PublicKeyToken=489b6accfaf20ef0)
   at Unity.Container.StrategyChain.BuildUp (Unity.Container, Version=5.3.2.0, Culture=neutral, PublicKeyToken=489b6accfaf20ef0)
   at Unity.Policy.BuildPlanPolicyExtensions.ExecuteBuildUp (Unity.Abstractions, Version=2.3.1.0, Culture=neutral, PublicKeyToken=6d32ff45e0ccc69f)
   at Unity.ObjectBuilder.BuilderContext.NewBuildUp (Unity.Container, Version=5.3.2.0, Culture=neutral, PublicKeyToken=489b6accfaf20ef0)
   at lambda_method (Anonymously Hosted DynamicMethods Assembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null)
   at Unity.ObjectBuilder.BuildPlan.DynamicMethod.DynamicBuildPlanGenerationContext+<>c__DisplayClass16_0.<GetBuildMethod>b__0 (Unity.Container, Version=5.3.2.0, Culture=neutral, PublicKeyToken=489b6accfaf20ef0)
   at Unity.ObjectBuilder.Strategies.BuildPlanStrategy.PreBuildUp (Unity.Container, Version=5.3.2.0, Culture=neutral, PublicKeyToken=489b6accfaf20ef0)
   at Unity.Container.StrategyChain.BuildUp (Unity.Container, Version=5.3.2.0, Culture=neutral, PublicKeyToken=489b6accfaf20ef0)
   at Unity.Policy.BuildPlanPolicyExtensions.ExecuteBuildUp (Unity.Abstractions, Version=2.3.1.0, Culture=neutral, PublicKeyToken=6d32ff45e0ccc69f)
   at Unity.UnityContainer.BuildUp (Unity.Container, Version=5.3.2.0, Culture=neutral, PublicKeyToken=489b6accfaf20ef0)

Этот API довольно маленький, у нас только один тип регистрируется в нашем файле WebAPIConfig. Вот как регистрируется тип:

    public static void Register(HttpConfiguration config)
    {
        // Web API configuration and services
        var container = new UnityContainer();
        container.RegisterType<IDataAdapter, APIDataAdapter>(new HierarchicalLifetimeManager());
        config.DependencyResolver = new UnityResolver(container);

        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...