DependencyInjection. Эталонное внедрение зависимостей

Зачем?

Нужные члены у вас описываются в интерфейсе модели.

Если меняете реализацию модели, её инжекция из-за этого не изменится.

Если же вам понадобились другие члены в интерфейсе, то они же для чего-то же понадобились.

И для учёта этого "чего-то" в типы использующие новый интерфейс придётся вносить изменения.

В том числе и, возможно, в конструктор.

Здесь правильно пишет

Катафалк

- многое зависит от правильной реализации архитектуры.

Допустит, у вас есть интерфейс:

C#Выделить код

1
2
3
4

public interface IUser
{
    public string Name {get;}
}

И есть две VM принимающие его.

Теперь вам пришло в голову на одной из страниц вывести аватарку юзера.

Если бы вы передавали в конструкторы тип User, то вам пришлось бы менять обе VM.

А с интерфейсом вы добавляете новый интерфейс и изменяете только ту VM в которой нужна аватарка:

C#Выделить код

1
2
3
4

public interface IUserAvatar : IUser
{
    public ImageSource Avatar{get;}
}

Другая же VM даже не узнает о том, что создан новый интерфейс и изменена реализация Модели.