public static Type CreateComponentContext(View view) { Type userSessionType = LoadUserSessionType(view.Application); ParameterClassTemplate template = new ParameterClassTemplate(); template.SetProperty("propertyMap", view.ResponseMap); template.SetProperty("parameterClassName", template.GetViewResultClassName(view)); template.SetProperty("parameterClassNamespace", template.GetViewsNamespace(view)); string source = template.RenderToString(); CSharpCodeProvider provider = new CSharpCodeProvider(new Dictionary <string, string>() { { "CompilerVersion", "v3.5" } }); CompilerParameters options = new CompilerParameters(); options.GenerateInMemory = true; options.ReferencedAssemblies.Add("System.dll"); options.ReferencedAssemblies.Add("System.Core.dll"); CompilerResults results = provider.CompileAssemblyFromSource(options, source); Type resultType = results.CompiledAssembly.GetTypes()[0]; Type ruleContextType = typeof(ComponentRuleContext <,>); return(ruleContextType.MakeGenericType(resultType, userSessionType)); }
public static Type CreateRequestType(Workflow workflow) { IList <string> sources = new List <string>(); ParameterClassTemplate parameterClassTemplate = new ParameterClassTemplate(); parameterClassTemplate.SetProperty("propertyMap", workflow.RequestMap); parameterClassTemplate.SetProperty("parameterClassName", parameterClassTemplate.GetWorkflowParametersClassName(workflow)); parameterClassTemplate.SetProperty("parameterClassNamespace", parameterClassTemplate.GetWorkflowNamespace(workflow)); parameterClassTemplate.SetProperty("addRowIdentity", false); sources.Add(parameterClassTemplate.RenderToString()); CSharpCodeProvider provider = new CSharpCodeProvider(new Dictionary <string, string>() { { "CompilerVersion", "v3.5" } }); CompilerParameters options = new CompilerParameters(); options.GenerateInMemory = true; options.ReferencedAssemblies.Add("System.dll"); options.ReferencedAssemblies.Add("System.Core.dll"); CompilerResults results = provider.CompileAssemblyFromSource(options, sources.ToArray()); return(results.CompiledAssembly.GetTypes()[0]); }