Почему библиотека C # System.IO.Abstractions записывает на диск?

c# #filesystems

#c# #файловые системы

Вопрос:

Согласно документации System.IO.Abstractions записывает только в память, а не на диск, тогда почему этот код записывается на диск? Я очень смущен.

 using System.IO.Abstractions;

public class Settings 
{
  readonly IFileSystem fileSystem;

  public Settings(IFileSystem fileSystem)
  {
    this.fileSystem = fileSystem;
  }

  public Update()
  {
    this.fileSystem.File.WriteAllText(Path, Text);  // writing to disc ???
  }
}
 

Комментарии:

1. Какой конкретный тип fileSystem имеет? Если это так new FileSystem() , в документах указано «реализация по умолчанию, которая вызывает System.IO «. Если это a MockFileSystem , да, оно должно быть только в памяти

2. Нигде нет ни единого упоминания о том, что это работает только в памяти, этот вопрос не имеет смысла. Даже на главной странице есть следующее: fileSystem: new FileSystem() //use default implementation which calls System.IO

Ответ №1:

Вам нужно использовать правильный конкретный тип при вызове Settings конструктора. Если fileSystem выполняется запись на диск, вы используете:

 System.IO.Abstractions:FileSystem
 

Вместо этого используйте:

 System.IO.Abstractions.TestingHelpers:MockFileSystem
 

Комментарии:

1. Хорошо, я понимаю, но какова цель иметь 2 конструктора и явно создавать экземпляр «new FileSystem ()»? Например, этот пост dontcodetired.com/blog/post /… говорит: «Если используется конструктор без параметров (например, в рабочей среде), будет использоваться экземпляр файловой системы, однако во время тестирования может быть предоставлена макет IFileSystem». Итак, я подумал, что один конструктор используется для производства, а другой — для тестирования, и именно поэтому я запутался, поскольку в моем коде у меня есть только 1 конструктор. Кстати, нам действительно нужны 2 конструктора?