У меня есть интерфейс IConsole
, описывающий, как записывать данные в консоль, и одна реализация, upperCaseConsole
.
IConsole внедряется в класс Foo
с использованием Unity.
public interface IConsole {
void WriteLine(string text);
}
public class upperCaseConsole: IConsole {
public void WriteLine(string text){
Console.WriteLine(text.ToUpper());
}
}
public class Foo{
private readonly IConsole console;
public Foo(IConsole console){
this.console = console;
}
public void WriteStuff(string stuff){
console.WriteLine(stuff);
}
}
Теперь я хотел бы изменить способ записи текста на консоль.Я проделал хорошую работу, отделив реализацию от foo, и я могу просто внедрить новую реализацию, скажем lowerCaseConsole
.
public class lowerCaseConsole: IConsole {
public void WriteLine(string text){
Console.WriteLine(text.ToLower());
}
}
Моя проблема в том, что, несмотря на мои лучшие тесты, я не совсем уверенчто lowerCaseConsole
выполнит эту работу, и я хотел бы некоторое время запустить обе реализации одновременно.
Как я могу сделать это, не дублируя весь код в Foo
?
Я бы хотел избежать чего-то вроде:
public class Foo{
private readonly IConsole lowerConsole;
private readonly IConsole upperConsole;
public Foo([Dependency("lower")] IConsole lowerConsole,
[Dependency("upper")] IConsole upperConsole){
this.lowerConsole = lowerConsole;
this.upperConsole = upperConsole;
}
public void WriteStuff(string stuff){
lowerConsole.WriteLine(stuff);
upperConsole.WriteLine(stuff);
}
}
Примечание. В реальной жизни я собираюсь двигаться дальше в изменении БД.Я хотел бы прозрачно начать запись в новую БД и посмотреть, как идут дела, но на всякий случай продолжайте запись в текущую БД.