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()) }); } }
/// <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(); } }