Это не имеет ничего общего с шаблоном MVVM как таковым, за исключением того факта, что зависимость представления от его ViewModel разрешается путем внедрения зависимости.
Как это работает, все довольно просто. Есть три простых понятия для DI:
Первое - это объявление зависимости , где некоторый объект указывает, что он зависит от чего-либо, либо через конструктор, либо через свойство (как было в вашем примере с использованием DependencyAttribute
).
Вторая концепция: регистрация , где вы регистрируете реализацию зависимостей, которые имеют ваши объекты (в вашем случае вы зарегистрировали реализацию IQuoteSource
). Обратите внимание, что вам не нужно было регистрировать ViewModel, потому что это не совсем реализация интерфейса, от которого вы зависите.
Третий - это то, что склеивает вещи, то есть разрешение зависимостей , где вы просите контейнер разрешить какой-то тип для вас, и он изучает, какие зависимости этот объект объявил (в вашем случае вы решаете MainWindow
, который зависит от ViewModel
), находит правильную зарегистрированную реализацию и разрешает ее. Это поведение распространяется касательно разрешения графа объектов (что разрешает зависимость ViewModel от IQuoteSource
).
Надеюсь, это поможет:)