private static string RepositoryFunctionsSnippet(ReportFileInfo info)
        {
            // TODO: Implement UseExecutionContext concept for reports, then remove the predefined parameter executionContext from _ReportFile_FileGenerator.
            return(string.Format(
                       @"protected static Func<object[][], string, Common.ExecutionContext, Rhetos.Dom.DefaultConcepts.ReportFile> _ReportFile_FileGenerator = {2};

        public Rhetos.Dom.DefaultConcepts.ReportFile GenerateReport({0}.{1} parameter, string convertFormat = null)
        {{
            {3}
            object[][] reportData = GetReportData(parameter);
            {4}
            Rhetos.Dom.DefaultConcepts.ReportFile file = _ReportFile_FileGenerator(reportData, convertFormat, _executionContext);
            {5}

            return file;
        }}

        Rhetos.Dom.DefaultConcepts.ReportFile IReportRepository.GenerateReport(object parameters, string convertFormat)
        {{
            return GenerateReport(({0}.{1}) parameters, convertFormat);
        }}

        ",
                       info.Module.Name,
                       info.Name,
                       info.Expression,
                       BeforePrepareDataTag.Evaluate(info),
                       BeforeGenerateReportTag.Evaluate(info),
                       AfterGenerateReportTag.Evaluate(info)));
        }
 public static string RegisterRepository(ReportFileInfo info)
 {
     return(string.Format(@"builder.RegisterType<{0}._Helper.{1}_Repository>().Keyed<IReportRepository>(""{0}.{1}"").InstancePerLifetimeScope();
     ", info.Module.Name, info.Name));
 }