Я работаю над проектом C # для разбора файлов разных типов.Для этого я создал следующую структуру классов:
interface FileType {}
class FileType1 : FileType {}
class FileType2 : FileType {}
abstract class FileProcessor<T> {}
class Processor_FileType1 : FileProcessor<FileType1> {}
class Processor_FileType2 : FileProcessor<FileType2> {}
Теперь я хотел бы создать фабричный шаблон, который просто берет путь к файлу и на основесодержимое файла решает, какой из 2 процессоров создать экземпляр .
В идеале (и я знаю, что этот код не работает), я бы хотел, чтобы мой код выглядел следующим образом:
class ProcessorFactory
{
public FileProcessor Create(string pathToFile)
{
using (var sr = pathToFile.OpenText())
{
var firstLine = sr.ReadLine().ToUpper();
if (firstLine.Contains("FIELD_A"))
return new Processor_FileType1();
if (firstLine.Contains("FIELD_Y"))
return new Processor_FileType2();
}
}
}
Проблема заключается в ошибке компилятора Using the generic type 'FileProcessor<T>' requires 1 type arguments
, поэтому моя программа могла сделать что-то вроде:
public DoWork()
{
string pathToFile = "C:/path to my file.txt";
var processor = ProcessorFactory.Create(pathToFile);
}
и переменная processor
может иметь значение Processor_FileType1
или Processor_FileType2
.
Я знаю, что мог бы сделать это, изменив Create
на аргумент типа, но я надеюсь, что мне не придется с тех пор, чтобы это убило идею выяснить это на основе данных вфайл.
Есть идеи?