Autofac несколько компонентов с двойным разрешением с ASP.NET MVC Core - PullRequest
0 голосов
/ 21 июня 2019

Отказ от ответственности: это мое первое использование Autofac (я знаком с DI, но использовал другие регистры контейнеров), поэтому я все еще читаю о том, как настроить Autofac, следуя рекомендациям.

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

Настройка:

Все регистрации сборщиков выполняются в Startup.cs

Фрагмент регистрации (для меня они выглядят нормально, но я не эксперт по Autofac)

            builder.RegisterType<HttpContextFactory>().As<IHttpContextFactory>().SingleInstance();
            builder.RegisterType<HttpContextAccessor>().As<IHttpContextAccessor>().InstancePerLifetimeScope();
            builder.RegisterType<ActionContextAccessor>().As<IActionContextAccessor>().InstancePerLifetimeScope();
            builder.RegisterType<OpenIdAuthEvents>().SingleInstance();
            builder.RegisterType<IntegrationIdentityProvider>().As<IPrincipalContext>().InstancePerLifetimeScope().PropertiesAutowired();
            builder.RegisterType<IntegrationIdentityProvider>().As<IIntegrationIdentityProvider>().InstancePerLifetimeScope().PropertiesAutowired();
A003 The non-shared component 70b960dd277a470e844c84cfbdd6b2ec, Microsoft.AspNetCore.Cors.Infrastructure.DefaultCorsPolicyProvider, has been resolved twice directly from the container. This usage pattern can lead to memory leaks when tracked/`IDisposable` components are present. 

Level (Warning)

Type (0x37AE056A)

AnalysisCode 
A003

AutofacAnalysisSessionId 
78c114c7fe244e77a1686db4c162986c

ComponentDescription 
Microsoft.AspNetCore.Cors.Infrastructure.DefaultCorsPolicyProvider

ComponentId 
70b960dd277a470e844c84cfbdd6b2ec

SourceContext 
Autofac.Analysis.Display.EventWriter

Это то же самое сообщение также происходит со следующими компонентами.

Microsoft.AspNetCore.Cors.Infrastructure.CorsService
Swashbuckle.AspNetCore.Swagger.ISwaggerProvider
Autofac.Extensions.DependencyInjection.AutofacServiceScopeFactory
Microsoft.AspNetCore.Hosting.IStartupFilter[]
Microsoft.AspNetCore.Mvc.Razor.Internal.DefaultRazorPageFactoryProvider
Microsoft.AspNetCore.Hosting.Builder.ApplicationBuilderFactory

Я не уверен, полезно ли это, но это может дать некоторое представление о том, как это устроено.При выполнении HTTP-запроса я вижу следующее.

A002 A <level 1> lifetime scope, 2474db230bfe44f9b4a2a22f71a8053a, has been active for more than 10 seconds. To ensure that components are properly released, lifetime scopes must be disposed when no longer required. 

AgeThresholdSeconds 
10

AnalysisCode 
A002

AutofacAnalysisSessionId 
f4d97c3ec5144ad8bfe23d0afe8d5755

LifetimeScopeDescription 
<level 1>

LifetimeScopeId 
2474db230bfe44f9b4a2a22f71a8053a

SourceContext 
Autofac.Analysis.Display.EventWriter
...