c# минимальный код для создания экземпляра на лету - PullRequest
0 голосов
/ 29 мая 2020

Предположим, мы хотим создать набор сервисов, которые могут или не могут использоваться:

  class ServiceCollection {
     public MyService MyService = new MyService(arg1,arg2,...);
     public MySecondService MySecondService = new MySecondService(arg1,arg2,...);
     ...

Поскольку мы не знаем, будет ли использоваться экземпляр сервиса или нет - мы хотели создать экземпляр службы на лету:

  class ServiceCollection {
     private MyService _MyService = null;
     public MyService MyService { 
        get {
           if (_MyService==null) _MyService = new MyService(arg1,arg2,...);
           return _MyService;
       }
     }

Это требование в случае, если код пользователя ссылается на службу дважды - следует использовать один и тот же экземпляр службы. Поскольку приведенный выше код ... довольно длинный ... Интересно, правильно ли следующее решение:

  class ServiceCollection {
     private MyService _MyService = null;
     public MyService MyService => _MyService = _MyService ?? new MyService(arg1, ...);

Или существует какое-либо другое (более элегантное и короткое) решение для этой простой проблемы?

1 Ответ

1 голос
/ 29 мая 2020

Я пытаюсь понять архитектуру. В общем, вы можете загружать различные службы на лету с помощью внедрения зависимостей. Так что я не вижу причин для go из-за трудности, с которой вы пытаетесь.

Или вы пытаетесь сбалансировать нагрузку на своей стороне уравнения? Если да, то почему?

Здесь есть две возможные идеи.

  1. Я не хочу загружать службу, пока она не будет использована
  2. Я хочу сбалансировать нагрузку между несколькими службами

Архитектурно первый отлично подходит для загрузки зависимостей через инъекцию. Последнее лучше, если у вас есть команда API, которая предоставит вам шкалу.

Я что-то упускаю?

...