Как слепить файл-мeнеджер?
Теперь - проблема.
Мне очень не хочется нагружать шаблоны лишней функциональностью.
В частности - функциональностью определения применимости шаблона в конкретном контексте и функциональностью записи/перезаписи файлов.
По применимости есть ограниченное, но - расширяемое, решение при формировании списка шаблонов.
Анализируются атрибуты и имплементация интерфейсов и по результатам принимается решение по включений в список.
Решение не полное - атрибуты не содержат, например, имен файлов - оно и понятно - это часть исходных данных и она будет доступна только после инстанцирования шаблонов.
Так что часть работы по применимости все одно ляжет либо на файловый менеджер, либо на генератор, либо будет вынесена еще куда-то.
Но это - пока не критично.
Критичная часть - функциональность записи.
Опять таки - Я не хочу иметь ее в шаблоне. Совсем не хочу. Вплоть до того, что не хочу давать шаблону возможность определять имя файла.
Хочу иметь отдельный и легко заменяемый (или - управляемый) менеджер записи (файловый менеджер), который будет записывать результат генерации в файл.
Возможно, что он так же должен будет отвечать на вопрос - а надо ли вообще генерировать данным шаблоном при этих исходных данных ?
Пока вроде как все получается сделать:
- шаблоны фильтруются изначально и отбираются те, которые требуют генерировать файл.
- параметры для шаблона вынесены из шаблона (в шаблоне только аксессоры) и могут быть расшарены с файловым менеджером.
А дальше начинается непонятное: надо каким-то образом решать проблему назначения файл-менеджера для шаблона.
Мне хочется, чтобы перезаписываемые файлы ложились в одну папку, а не перезаписываемые - в другую.
Например так:
C:\_generated\Overwritebale\Solution1\Project1\A.cs
C:\_generated\ManualCode\Solution1\Project1\A.cs
где A.cs - partial class.
Ожидается, что в МануалКоде будет добавлятся ручная часть кодирования.
В примере используются или два шаблона, или один с дополнительным параметром.
При этом часть путей C:\_generated\Overwritebale\ и C:\_generated\ManualCode\ определены в Исходных данных,
Допустим есть два разных файл-менеджера и два шаблона и надо выбрать подходящий и связать его с шаблоном или потоком.
Как и когда это делать?
или
Куда и какую информацию добавить чтобы это было просто?