Если вы использовали DependencySerices в Xamarin.Forms, вы уже сделали это.Объяснение с точки зрения Xamarin.Forms
Давайте предположим, что вашему ContentPage
нужен класс Network
для проверки наличия сетевого подключения, традиционный способ сделать это - использовать ключевое слово * 1005 и получитьэкземпляр, так что вы можете вызывать его методы.
public MyContentPage : ContentPage
{
private Network network;
public MyContentPage()
{
//..
network = new Network();
}
}
public Network()
{
public bool HasConnectivity() { ... }
}
В этом нет ничего плохого, но что если классу Network
нужен класс Log
внутри него?И MyContentPage
также нужен класс Log
и класс Dialog
?И это нужно сделать на всех ваших 50 других страницах ??Внедрение зависимостей обращается к этим и многим другим!
Вы создаете интерфейс и его реализацию, затем регистрируете их в контейнере.Затем контейнер разрешит все зависимости для вас!
public MyContentPage : ContentPage
{
private INetwork _network;
private IDialog _dialog;
public MyContentPage(INetwork network, IDialog dialog)
{
//..
_network = network;
_dialog = dialog;
}
}
public Network(ILog log)
{
public bool HasConnectivity() { ... }
}
Если вы зарегистрировали все зависимости, Контейнер позаботится о графике зависимостей и разрешит их для вас.Если Контейнеру не удалось разрешить график, возможно, из-за того, что вы не зарегистрировались или у вас могут быть циклические зависимости, он выбросит исключение.
Сначала это кажется совершенно ненужным, но по мере роста вашего приложения MVVMв сочетании с DI может быть более мощным и простым для разработки.
То, что я объяснил, является лишь небольшой частью DI, вы можете прочитать больше о IoC и DI в этой потрясающей публикации Мартина Фаулера