Is there a way to do reflection pre-compile – at design time?
My intent is to use T4 to spit out custom codes based on classes that implement certain interfaces. I know I can call upon reflection, but I want the T4 script to spit out the additional code before compile, otherwise I will need to compile the code twice, once to generate dlls, twice to let T4 reflect on the previously generated dll and add additional scaffolding.
Is there a way to do reflection at design time?
Is there a better way to do this?
There actually is a way of generating code pre-build based on the CodeModel provided by Visual Studio Automation: The Project Interface provides a Property “CodeModel” that contains a graph of all model artifacts in that project. You might want to traverse it in order to find classes, interfaces, properties, … based on which you generate your output code.
dandrejw already mentioned the Tangible T4-Editor. It has got a free template gallery. There is a reusable template “tangible Visual Studio Automation Helper” which should be extremely helpful in your case. Using this template you could solve your issue like this:
This is code within a t4 template detecting all classes that implement INotifyPropertyChanged.
Put your output code where the code snippet says “Render your code here”.