.Net Core 2.2, Ioc container - установить свойство после построения объекта - PullRequest
0 голосов
/ 19 июня 2019

Как я могу установить свойство службы, которая зарегистрирована в ServiceCollection после ее создания.Я не могу передать значение конструктору, так как это приведет к циклической зависимости.Разыскивается поведение:

   public class ServiceA : IServiceA
   {
        public ServiceA(IServiceB serviceB)
        {
            ServiceB = serviceB;
        }
        IServiceB ServiceB {get; set;}
   }

   public class ServiceB : IServiceB
   {
       ServiceA {get; set;}
   }

   services.AddSingleton<IServiceA, ServiceA>();
   services.AddSingleton<IServiceB, ServiceB>();
   //I need something like this
   services.Inject<IServiceB>((serviceB, serviceProvider) => 
  {
      serviceB.ServiceA = serviceProvider.GetService<IServiceA>();
  });

1 Ответ

0 голосов
/ 19 июня 2019

Зачем вообще вызывать конструктор?

Как насчет просто:

public class ServiceB : IServiceB
{
    private readonly IServiceA _serviceA
    public ServiceB(IServiceA serviceA)
    {
         _serviceA = serviceA;
    }

    public IServiceA ServiceA {get { return _serviceA;}}
}

Я не вижу здесь циклической ссылки, если только ServiceA не нужен ServiceB, а вы этого не продемонстрировали.Пока что это линейная установка.

...