0

Мне интересно, знает ли кто-нибудь о любых системах перехвата методов на основе шаблонов T4?T4 Перехват шаблона

Мы начинаем писать мобильные приложения (в настоящее время с MonoTouch для IOS). У нас очень хороший базовый набор функций DI/IoC, и я бы хотел использовать это в разработке для новой платформы. Поскольку генерация кода времени исполнения Reflection.Emit не поддерживается, я надеюсь использовать T4-шаблоны для реализации функции динамического перехвата (+ TinyIoC в качестве контейнера для разрешения).

В настоящее время мы используем Castle Windsor (и намерены продолжать делать это для нашей SL и полной разработки .NET), но все специфические связи Windsor полностью инкапсулированы, поэтому, учитывая подходящее решение T4, это не должно быть трудно реализовать адаптер, который использует вместо TWS-версии вместо Windsor.

ответ

1

Если я правильно понял, вы хотите использовать T4 для генерации кода «на лету» (во время выполнения). Я не знаю ни одной системы, которая делает это, но я не думаю, что было бы очень сложно написать такую ​​вещь.

Что вам нужно сделать, это дать указание C# (или любому другому компилятору .NET) скомпилировать некоторый код и сгенерировать сборку. Когда это будет сделано, вам необходимо загрузить эту сборку в свой AppDomain. После этого вы можете использовать типы в этой динамически загруженной сборке.

Шаблонный движок T4 (если я не ошибаюсь) является частью Visual Studio, поэтому сложная часть будет заключаться в том, чтобы побудить механизм шаблона генерировать код, возможно, без вашего приложения, которое нуждается в зависимости от Visual Studio или даже начать (это было бы ужасно).

Если вам не нужны полные возможности T4 (это скорее всего), вы также можете выщипывать некоторый .NET-код самостоятельно, защищать его до файла и инструктировать компилятор C# для сборки сборки для вас.

Удачи.

+0

На самом деле есть проект Mono, который использует его на ходу во время выполнения:) .... Но на самом деле это не то, что я пытаюсь сделать здесь. Даже если бы я мог это сделать во время выполнения, это не хорошо, потому что платформа (MonoTouch/iOS) не позволит мне скомпилировать ее во время выполнения (без динамического кода). Я пытаюсь автоматически сгенерировать и скомпилировать код из шаблонов T4 во время сборки, чтобы получить тот же эффект от генерируемых классов среды выполнения. Мне нравится ваша последняя идея ... возможно, есть консольное приложение, которое идет скомпилированными сборками и использует CSharpCodeProvider, чтобы выплевывать прокси-классы в файл, который компилируется ...? – Jeff

Смежные вопросы