Посмотрите на внедрение зависимостей, а затем посмотрите на Inversion of Control.
У TekPub есть отличный бесплатный эпизод по этим двум идеям, используя пример, очень похожий на ваш.Это должно помочь вам с конкретным образцом.: -)
http://tekpub.com/view/concepts/1
Пример кода из видео:
class Samurai {
IWeapon _weapon;
public Samurai() {
_weapon = new Sword();
}
public Samurai(IWeapon weapon) {
_weapon = weapon;
}
public void Attack(string target) {
_weapon.Hit(target);
}
}
Выше DI (с конструктором IWeapon).Теперь, добавив Inversion of Control, вы получаете еще больший контроль.
Используя контейнер IOC, вы сможете управлять IWeapon с помощью инъекции, а не в самом классе.
Видео использует NInject в качестве IOC и показывает, как выможет исключить IWeapon Constructor и получить контроль над классом и всеми классами, которым необходимо использовать IWeapon для использования того, что вы хотите, в одной области / конфигурации.
Пример из видео:
class WarriorModule: NinjectModule {
public override void Load() {
Bind<IWarrior>().To<Samurai>();
Bind<IWeapon>().To<Sword>();
}
Приведенная выше конфигурация сообщает NInject, что всякий раз, когда он встречает IWarrior для использования самураев, и всякий раз, когда он использует IWeapon для использования Sword.
В видео рассказывается, как это небольшое изменение повышает вашу гибкость.Он добавляет еще один модуль для самурии, которая использует оружие дальнего боя и т. Д.
1025 * Вы можете изменить их по мере необходимости / *. 1026 *