Почему я получаю 2 экземпляра, когда они зарегистрированы как одиночные - PullRequest
0 голосов
/ 29 января 2019

У меня есть класс ClassA

public class ClassA : IRefreshable
{
}

, и он зарегистрирован в стартапе

services.AddSingleton<ClassA>();

Я также регистрирую свои услуги как одиночный

services.AddSingleton(services);

Я также создал контроллер с именем RefreshController, который получает коллекцию IServiceCollection в конструкторе.

  public RefreshController(IServiceCollection sc)
  {
  }

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

       this.typesToRefresh = sc.Where(s => s.Lifetime == ServiceLifetime.Singleton &&
       s.ServiceType.FullName.ToLower().StartsWith("MyNamespace")
       && typeof(IRefreshable).IsAssignableFrom(s.ImplementationType)).ToList();


            typesToRefresh.ForEach(t =>
            {
                IRefreshable rf = (IRefreshable)sProvider.GetService(t.ServiceType);
                rf.Refresh();
            });

Моя проблема заключается в том, что я получаю 2 экземпляра для одной и той же зарегистрированной службы.Есть идеи ??

1 Ответ

0 голосов
/ 29 января 2019

OK!Оказывается, каждый поставщик услуг сам по себе.Я удалил все .buildServiceProvider из своего кода, и я обращаюсь к инфраструктуре sp в контроллере из Httpcontext.RequestServices и в методе Startup.Configure в IApplicationBuilder.ApplicationServices.

Спасибо за вашу помощь.

...