我在這裏鏈接我的類構造函數的動機是讓我的應用程序有一個默認構造函數供主流使用,另一個允許我注入模擬和存根。我們想知道其他人會在這裏做什麼嗎?在這個調用和反直覺調用一個默認構造函數的參數化構造函數中,它似乎有點醜陋的'新'事物,我想知道其他人會在這裏做什麼?這是使用構造函數鏈接的好方法嗎? (...允許測試)
(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...
}
關於這方面的討論已經有相當多的討論。例如,請參閱http://stackoverflow.com/questions/300286/constructor-injection-and-default-overloads。普遍的共識似乎是,添加默認構造函數可能會造成不必要的混淆,儘管有些人認爲當不使用依賴注入框架的調用者使用庫時它是值得的。 – 2010-03-24 00:19:12
感謝您的鏈接。在我的情況下,我正在編寫一個獨立的應用程序,而不是一個庫。依賴注入框架是另一個從我現在的位置開始的曲折的學習階梯,但我應該調查一下。 – Grokodile 2010-03-24 00:40:16