- •SOLID
- •О пользе проектирования
- •Принцип единственной обязанности
- •Принцип открытости-
- •Пример
- •Пример (продолжение)
- •Принцип подстановки
- •Программирование по контракту
- •Контракты в .NET
- •Code Contracts в Студии
- •Принцип разделения интерфейсов
- •Принцип инверсии зависимостей
- •Пример зависимости
- •Инверсия зависимости
- •Код после инверсии зависимости
- •IoC-контейнер
- •Пакет Ninject и его установка
- •Ninject в настольном приложении
- •Атрибут
- •Самостоятельно
Атрибут
Версия класса Warrior с полем
weaponpublic class W arrior
{
readonly I eapon w eapon;
public W arrior(I eapon w eapon)
{
this.w eapon = w eapon;
}
public void Kill()
{
w eapon.Kill();
}
}
Версия класса Warrior со свойством
Weaponpublic class W arrior
{
[Inject]
public I eapon W eapon { set;get;}
public void Kill()
{
W eapon.Kill();
}
}
[Inject]
Ninject |
|
инициализирует |
|
автоматические |
|
свойства, если они |
|
открытые и помечены |
|
атрибутом [Inject] |
21 |
|
Самостоятельно
class ScheduleM anager
{
public String G etSchedule()
{
return "1,2,3";
}
}
class ScheduleView er
{
ScheduleM anager _scheduleM anager;
public ScheduleView er(ScheduleM anager scheduleM anager)
{
_scheduleM anager= scheduleM anager;
}
public string RenderSchedule()
{
return "< " + _scheduleM anager.G etSchedule()+ "> ";
}
}
class Program
{
static void M ain(string[]args){
ScheduleView er sv = new ScheduleView er(new ScheduleM anager()); Console.W riteLine(sv.RenderSchedule());
}
}
Объект ScheduleViewer показывает расписание, придав ему эстетический вид.
Он получает расписание в сыром виде при помощи объекта ScheduleManager
Преобразуйте заданный код, внедрив зависимость от интерфейса и применив IoC-контейнер для создания объектов.
22