С точки зрения Инверсия управления или Инверсия зависимости , да, это неправильно.
Вы утверждаете, что объект, который работает в каталогах, не может выполнять свою работу, если они не существуют. Я бы абстрагировал предоставление и проверку / создание каталогов в другую абстракцию, а затем передал бы реализацию этой абстракции вашему объекту.
Тогда ваш объект просто получит каталоги из этой абстракции и продолжит оттуда.
В качестве примера, вот что я имею в виду. Во-первых, существует абстракция поставщика каталогов, например:
public interface IDirectoryProvider
{
// Gets the full paths to the directories being worked on.
IEnumerable<string> GetPaths();
}
Тогда есть реализация.
public sealed class DirectoryProvider
{
public DirectoryProvider(IEnumerable<string> directories)
{
// The validated directories.
IList<string> validatedDirectories = new List<string>();
// Validate the directories.
foreach (string directory in directories)
{
// Reconcile full path here.
string path = ...;
// If the directory doesn't exist, create it.
Directory.CreateDirectory(path);
// Add to the list.
validatedDirectories.Add(path);
}
}
private readonly IEnumerable<string> _directories;
public IEnumerable<string> GetPaths()
{
// Just return the directories.
return _directories;
}
}
Наконец, есть ваш класс, который обрабатывает каталоги, которые будут выглядеть так:
public sealed DirectoryProcessor
{
public DirectoryProcessor(IDirectoryProvider directoryProvider)
{
// Store the provider.
_directoryProvider = directoryProvider;
}
private readonly IDirectoryProvider _directoryProvider;
public void DoWork()
{
// Cycle through the directories from the provider and
// process.
foreach (string path in _directoryProvider.GetPaths())
{
// Process the path
...
}
}
}