private IEnumerable <RouteDescriptor> GetRoutes()
        {
            var displayPathsPerArea = _blueprint.GetControllers().GroupBy(
                x => x.AreaName,
                x => x.Feature.Descriptor.Extension);

            foreach (var item in displayPathsPerArea)
            {
                var areaName            = item.Key;
                var extensionDescriptor = item.Distinct().Single();
                var displayPath         = extensionDescriptor.Descriptor.Path;
                var defaultSessionState = SessionStateBehavior.Default;
                //                Enum.TryParse(extensionDescriptor.SessionState, true, out defaultSessionState);
                if (string.IsNullOrWhiteSpace(displayPath) || displayPath == "/" || displayPath == "\\")
                {
                    continue;
                }
                yield return(new RouteDescriptor
                {
                    Priority = -10,
                    SessionState = defaultSessionState,
                    Route = new Route(
                        "Admin/" + displayPath + "/{action}/{id}",
                        new RouteValueDictionary {
                        { "area", areaName },
                        { "controller", "admin" },
                        { "action", "index" },
                        { "id", string.Empty }
                    },
                        new RouteValueDictionary(),
                        new RouteValueDictionary {
                        { "area", areaName }
                    },
                        new MvcRouteHandler())
                });

                yield return(new RouteDescriptor
                {
                    Priority = -10,
                    SessionState = defaultSessionState,
                    Route = new Route(
                        displayPath + "/{controller}/{action}/{id}",
                        new RouteValueDictionary {
                        { "area", areaName },
                        { "controller", "home" },
                        { "action", "index" },
                        { "id", string.Empty }
                    },
                        new RouteValueDictionary(),
                        new RouteValueDictionary {
                        { "area", areaName }
                    },
                        new MvcRouteHandler())
                });
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 注册动作。
        /// </summary>
        /// <param name="builder">容器建造者。</param>
        /// <param name="blueprint">外壳蓝图。</param>
        public void Registrations(ContainerBuilder builder, ShellBlueprint blueprint)
        {
            foreach (var item in blueprint.GetControllers())
            {
                var serviceKeyName = (item.AreaName + "/" + item.ControllerName).ToLowerInvariant();
                var serviceKeyType = item.Type;
                RegisterType(builder, item)
                .Keyed <IController>(serviceKeyName)
                .Keyed <IController>(serviceKeyType)
                .WithMetadata("ControllerType", item.Type)
                .InstancePerDependency();
            }

            foreach (var item in blueprint.GetHttpControllers())
            {
                var serviceKeyName = (item.AreaName + "/" + item.ControllerName).ToLowerInvariant();
                var serviceKeyType = item.Type;
                RegisterType(builder, item)
                .Keyed <IHttpController>(serviceKeyName)
                .Keyed <IHttpController>(serviceKeyType)
                .WithMetadata("ControllerType", item.Type)
                .InstancePerDependency();
            }
        }