Unity Container: разница между конструктором и свойством против внедрения метода - PullRequest
0 голосов
/ 18 января 2020

Это специфицируется c для Unity DI.

Кажется, распространено мнение, что если большинству вашего класса требуется определенная зависимость, вы должны использовать инжектор конструктора. Если зависимость требуется только в подмножестве вариантов использования для класса, то вы должны использовать внедрение свойства (или, возможно, внедрение метода). Я предположил, что это потому, что последние два не разрешают объект до тех пор, пока на них не ссылаются, но по моему опыту все три из них разрешают зависимости от создания объекта, так в чем же смысл использовать один над другим?

Кроме того, в документации Unity по отложению создания объекта упоминаются только обобщенные типы Lazy <> и Fun c <>.

  1. Есть ли способ настроить свойство и / или внедрение метода для отсрочки разрешения?
  2. Если нет, существуют ли разные методы, позволяющие просто стилизовать c предпочтения?

1 Ответ

0 голосов
/ 18 января 2020

Хорошо, в принципе откладывать разрешение с помощью свойств - плохая практика. Некоторые DI-контейнеры (Microsoft.Extensions. * https://docs.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection?view=aspnetcore-3.1) даже не позволяют вам этого делать.

Если ваш код соответствует SOLID принципам (https://en.wikipedia.org/wiki/SOLID), необходимость отложить разрешение почти никогда не возникнет. Вместо этого вы должны разделить ваши классы на более мелкие части, и каждый из них будет внедрять через свой конструктор. Если вам все еще нужно отложить разрешение (например, при создании фасада), вы можете внедрить абстрактную фабрику и вызвать ее фабричный метод для создания экземпляра экземпляра, когда он вам нужен.

...