Auto-generated factories using the Roslyn C# compiler