Мотивация для цепочки конструкторов классов здесь заключается в том, что у меня есть стандартный конструктор для основного использования моим приложением, а второй, который позволяет мне вводить макет и заглушку.Является ли это хорошим или плохим способом использования цепочки конструкторов? (... для тестирования)
Это просто кажется уродливым «новым» в «: this (...)» вызовом и встречным интуитивным вызовом параметризованного конструктора из конструктора по умолчанию, я задавался вопросом, что здесь будут делать другие люди?
(FYI ->SystemWrapper)
using SystemWrapper;
public class MyDirectoryWorker{
// SystemWrapper interface allows for stub of sealed .Net class.
private IDirectoryInfoWrap dirInf;
private FileSystemWatcher watcher;
public MyDirectoryWorker()
: this(
new DirectoryInfoWrap(new DirectoryInfo(MyDirPath)),
new FileSystemWatcher()) { }
public MyDirectoryWorker(IDirectoryInfoWrap dirInf, FileSystemWatcher watcher)
{
this.dirInf = dirInf;
if(!dirInf.Exists){
dirInf.Create();
}
this.watcher = watcher;
watcher.Path = dirInf.FullName;
watcher.NotifyFilter = NotifyFilters.FileName;
watcher.Created += new FileSystemEventHandler(watcher_Created);
watcher.Deleted += new FileSystemEventHandler(watcher_Deleted);
watcher.Renamed += new RenamedEventHandler(watcher_Renamed);
watcher.EnableRaisingEvents = true;
}
public static string MyDirPath{get{return Settings.Default.MyDefaultDirPath;}}
// etc...
}
Было так много дискуссий об этом на SO. Например, см. Http://stackoverflow.com/questions/300286/constructor-injection-and-default-overloads. Общий консенсус, похоже, заключается в том, что добавление конструктора по умолчанию может быть излишне запутанным, хотя некоторые утверждают, что это стоит того, когда ваша библиотека используется вызывающими программами, которые не используют инфраструктуру инъекции зависимостей. –
Спасибо за ссылку. В моем случае я пишу автономное приложение, а не библиотеку. Рамки внедрения зависимостей - это еще один шаг вверх по пышной учебной лестнице, откуда я сейчас, но что-то, что я должен исследовать. – Grokodile