Esempio n. 1
0
        /// <summary>
        /// Gets the ControllerInfo collection from a list of types.
        /// </summary>
        /// <param name="targetTypes">The types that contain controllers.</param>
        /// <param name="kind">The kind of controller to get infos for (Web/API)</param>
        /// <returns></returns>
        private static IEnumerable <ControllerInfo> GetControllerInfos(IEnumerable <ControllerItem> targetTypes, ControllerKind kind)
        {
            var types           = targetTypes.Where(t => t.Kind == kind).Select(t => t.Type);
            var controllerInfos = new List <ControllerInfo>(types.Count());

            foreach (var targetType in types)
            {
                var customAttributes = targetType.GetCustomAttributes(false);
                //Ignore if controller is marked with [SkipJavascriptGeneration]
                if (customAttributes.OfType <SkipJavascriptGenerationAttribute>().Any())
                {
                    continue;
                }

                var controllerInfo = new ControllerInfo
                {
                    ControllerType      = targetType,
                    Kind                = kind,
                    UseNamespace        = customAttributes.OfType <GenerateWithNamespaceAttribute>().Any(),
                    EnableClientCaching = customAttributes.OfType <EnableClientCacheAttribute>().Any()
                };
                ApiReflector.GetActionInfos(controllerInfo, kind);

                if (controllerInfo.Actions.Any())
                {
                    controllerInfos.Add(controllerInfo);
                }
            }
            return(controllerInfos);
        }
Esempio n. 2
0
        /// <summary>
        /// Loads an assembly for reflection.
        /// </summary>
        /// <param name="assemblyName">The fully qualified assembly name.</param>
        /// <returns></returns>
        static public string GenerateControllerScript(string assemblyName)
        {
            var apiControllerTypes = ApiReflector.GetApiControllerTypes(assemblyName);
            var apiControllerInfos = ApiReflector.GetControllerInfos(apiControllerTypes, ControllerKind.Api);
            var mvcControllerInfos = ApiReflector.GetControllerInfos(apiControllerTypes, ControllerKind.Mvc);

            var stringBuilder = ApiReflector.GenerateApiControllerScripts(apiControllerInfos);

            stringBuilder.AppendLine();
            stringBuilder.Append(ApiReflector.GenerateMvcControllerScripts(mvcControllerInfos));

            return(stringBuilder.ToString());
        }
Esempio n. 3
0
        public void ProcessRequest(HttpContext context)
        {
            var js = new StringBuilder();

#if !DEBUG
            var minifier = new Microsoft.Ajax.Utilities.Minifier();
#endif
            context.Response.ContentType = "text/javascript";

            // ReSharper disable RedundantAssignment
            var cachedStaticFilesResult = MemoryCache.Default.Get("ED47.Stack.Reflector.Static") as string;
            // ReSharper restore RedundantAssignment
#if DEBUG
            //Disable caching during development to make debugging easier
            cachedStaticFilesResult = null;
#endif
            // ReSharper disable ConditionIsAlwaysTrueOrFalse
            if (cachedStaticFilesResult == null)
            // ReSharper restore ConditionIsAlwaysTrueOrFalse
            {
                var staticScriptBuilder = new StringBuilder();
                staticScriptBuilder.AppendLine("/*==================  STATIC SCRIPTS ==================*/");
                ReflectorHandler.AppendStaticScripts(staticScriptBuilder);
                staticScriptBuilder.AppendLine("/*=====================================================*/");
                cachedStaticFilesResult = staticScriptBuilder.ToString();
            }

            js.Append(cachedStaticFilesResult);

            var assemblyNames = context.Request.QueryString["assemblyName"];

            if (String.IsNullOrWhiteSpace(assemblyNames))
            {
                context.Response.ContentType = "text/javascript";
                #if !DEBUG
                context.Response.Write(minifier.MinifyJavaScript(js.ToString()));
                #else
                context.Response.Write(js.ToString());
                #endif
                return;
            }

            var assemblyNameArray = assemblyNames.Split(';');

            foreach (var assemblyName in assemblyNameArray)
            {
                var cacheKey = "ED47.Stack.Reflector?assemblyName=" + assemblyName;
                // ReSharper disable RedundantAssignment
                var cachedResult = MemoryCache.Default.Get(cacheKey) as string;
                // ReSharper restore RedundantAssignment
#if DEBUG
                cachedResult = null; //Disable caching during development to make debugging easier
#endif
                // ReSharper disable ConditionIsAlwaysTrueOrFalse
                if (cachedResult == null)
                // ReSharper restore ConditionIsAlwaysTrueOrFalse
                {
                    cachedResult = ApiReflector.GenerateControllerScript(assemblyName) + ModelReflector.GenerateModelScript(assemblyName);
                    MemoryCache.Default.Add(new CacheItem(cacheKey, cachedResult),
                                            new CacheItemPolicy {
                        Priority = CacheItemPriority.NotRemovable
                    });
                }
                js.Append(cachedResult);
            }
#if DEBUG
            context.Response.Write(js.ToString());
#else
            context.Response.Write(minifier.MinifyJavaScript(js.ToString()));
#endif
        }