При разработке проектов уровня плагинов - это как забивание гвоздей кувалдой. Даже если вы разберетесь с этим, то толку от этого будет ноль
Вполне вероятно. Я просто иногда читаю по C# литературу, смотрю примеры и сталкиваюсь с новыми понятиями/инструментами/подходами и мне становится интересно изучить всё это. И вот бывает так, что я не понимаю, что к чему и зачем вообще это придумали.
Ну если просто на пальцах, то внедрение зависимостей работает примерно так:
При старте приложения создается DI контейнер. В контейнере регистрируются типы. Ну, например, у вас есть класс ClassA и класс ClassB - вы их регистрируете в контейнере.
Далее, при работе вам нужно, чтобы в ClassB использовался ClassA. Для этого вы просто в конструкторе ClassB добавляете аргументом ClassA и все. При работе приложения там контейнер уже сам разберется и внедрит экземпляры нужных классов.
Конечно, там чуть посложнее и есть ряд условий и ограничений
Ну а использование интерфейсов позволяет менять реализации сервисов не меняя кода, использующего интерфейсы. Можно даже в рантайме менять. Например, вы сделали интерфейс IPrinter с методом Print. Можете сделать класс PdfPrinter и класс WordPrinter. Думаю, понятно, что если вы используете в коде интерфейс, то неважно какой экземпляр класса подсунуть - оба работать будут