Практика «Fractal Painter. DIP»
Скачайте проект DI-container.FractalPainter и запустите его. Перед вами программа, которая умеет рисовать фракталы с заданными настройками. Также можно задавать дополнительные настройки размера изображения и цвета отрисовки (пока что цвет отрисовки можно менять только у кривой Коха). Рекомендуем изучить сам проект и принцип его работы. Это в будущем позволит вам лучше понять, как внедрение DI-контейнера упрощает развитие программы. Начните изучение с файла App\Program.cs. В файлах App\ActionsTask.cs и App\DIContainerTask.cs специально собраны все необходимые классы для выполнения задания. В реальном проекте, конечно, стоило бы каждый класс поместить в собственный файл.
DI-контейнер — очень мощный инструмент в больших проектах, но чтобы приступить к его внедрению, для начала необходимо сделать небольшой рефакторинг проекта в соответствии с Dependency Inversion Principle (DIP). Работайте в файле App\ActionsTask.cs. Вам необходимо отрефакторить все классы, унаследованные от IUiAction, так чтобы в них перестал использоваться класс Services (находящийся в файле DIContainerTask.cs), а все необходимые для работы зависимости принимались через единственный конструктор и хранились в private-полях. Обращения к классу Services должны переместится в конструктор без параметров класса MainForm.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
using System; using System.IO; using System.Windows.Forms; using System.Drawing; using FractalPainting.Infrastructure.Common; using FractalPainting.Infrastructure.UiActions; namespace FractalPainting.App { public class ImageSettingsAction : IUiAction { public MenuCategory Category => MenuCategory.Settings; public string Name => "Изображение..."; public string Description => "Размеры изображения"; private readonly ImageSettings imageSettings; private readonly IImageHolder imageHolder; public ImageSettingsAction(ImageSettings imageSettings, IImageHolder imageHolder) { this.imageSettings = imageSettings; this.imageHolder = imageHolder; } |
Стоимость решения этой задачи всего 100 рублей, купи решения у меня 🙂
Внимание! Решение было обновлено в 2021