Я хочу создать классы утилит для System.Io (например, «Файл», «Каталог» и т. Д.).
Поскольку наследование статических классов невозможно, я хочу знать, как правильно обернуть, скажем,System.IO.File.
Я бы создал три типа:
Интерфейс, содержащий все методы, которые вы хотите иметь возможность протестировать и т. Д., Например,
public interface IFileSystem { Stream OpenWrite(string filename); TextReader OpenText(string filename); // etc }
Реализация, которая делегирует реализации системы:
public class FrameworkFileSystem : IFileSystem { public Stream OpenWrite(string filename) { return File.OpenWrite(filename); } // etc }
Поддельная реализация для тестирования:
public class FakeFileSystem : IFileSystem { // Probably all kinds of things to allow in-memory files // to be created etc }
Возможно, вы не захотите помещать туда все из File, поскольку многие операции могут быть составлены из «базовых» операций. Конечно, это означало бы самостоятельное выполнение операций, что может быть нежелательным ...
File