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));
        }
示例#2
0
        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]);
        }