public interface IDirectoryVisitor{
public void Visit(DirectoryInfo directory);
}
public class DirectoryMiner{
private IList<IDirectoryVisitor> _visitors = new List<IDirectoryVisitor>();
public void Accept(IDirectoryVisitor visitor){
_visitors.Add(visitor);
}
public void MineDirectory(DirectoryInfo directory){
_visitors.Each(v => v.Visit(directory));
directory.GetDirectories().Each(dir=>MineDirectory(dir));
}
}
public static EachExtension
{
public static void Each<T>(this IEnumerable<T> list, Action<T> action){
foreach( var item in list){ action(item); }
}
}