Правильный способ создания одноэлементного сервиса в ASP. NET Core - нужно ли использовать ключевое слово stati c или нет? - PullRequest
0 голосов
/ 19 февраля 2020

Это действительно смущает меня. Ничто не мешает нам создать класс с полями экземпляра и методами экземпляра, в отличие от создания класса с полями stati c и методами stati c. Оба могут быть зарегистрированы как одиночные.

Есть ли предпочтительный подход к этой проблеме и почему?

РЕДАКТИРОВАТЬ: Я не спрашиваю о создании класса с использованием шаблон синглтона. Я спрашиваю об одноэлементной зависимости, вводящей класс по сравнению с инъекцией того же класса, но с stati c определенными членами / полями / методами / свойствами.

Ответы [ 2 ]

0 голосов
/ 19 февраля 2020

Я спрашиваю о введении [...] того же класса, но с указанием c определенных членов / полей / методов / свойств

Это возможно, но бесполезно. Если контроллеру требуется такой одноэлементный объект , то у вас все еще нет метода экземпляра для вызова для этого объекта. Ваш контроллер должен вызывать stati c методы для класса.

[...] создавая класс с полями экземпляра и методами экземпляра

Это лучше способ сделать это, потому что это позволит вам смоделировать объект для модульного тестирования.

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

Надеюсь, это прояснит ситуацию для вас.

0 голосов
/ 19 февраля 2020

Вам необходимо понять различные времена жизни для DI и ваши потребности, чтобы выбрать правильный срок службы.

  • Временные службы созданы каждый раз, когда запрашивается услуга (таким образом, если в 1 запросе служба используется 2 раза, она будет создана 2 раза).
  • Scoped службы создаются для каждого веб-запроса (так что если в 1 запросе сервис используется 2 раза, он будет создан только один раз).
  • Singleton - это экземпляр, который будет работать в течение всего времени жизни приложения (все запросы будут разделять это один экземпляр).

Если сомневаетесь, сделайте его переходным.

РЕДАКТИРОВАТЬ

Я думаю, стоит упомянуть, что если вы создадите а службы как временные, и у них есть свойства * stati c, которые вы постоянно изменяете, тогда это будет влиять на все остальные созданные экземпляры, поскольку stati c влияет на сам тип, а не на экземпляр.

...