diff --git a/src/Simplify.Web/Meta/ControllersMetaStore.cs b/src/Simplify.Web/Meta/ControllersMetaStore.cs index 18ce3f6a..0f10daaa 100644 --- a/src/Simplify.Web/Meta/ControllersMetaStore.cs +++ b/src/Simplify.Web/Meta/ControllersMetaStore.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Data; using System.Linq; using Simplify.Web.Attributes.Setup; @@ -38,41 +39,38 @@ public IList ControllersMetaData if (_controllersMetaData != null) return _controllersMetaData; - var controllersMetaContainers = new List(); - - var types = SimplifyWebTypesFinder.FindTypesDerivedFrom(); - types = types.Concat(SimplifyWebTypesFinder.FindTypesDerivedFrom(typeof(Controller2<>))).ToList(); - types = types.Concat(SimplifyWebTypesFinder.FindTypesDerivedFrom()).ToList(); - types = types.Concat(SimplifyWebTypesFinder.FindTypesDerivedFrom()).ToList(); - types = types.Concat(SimplifyWebTypesFinder.FindTypesDerivedFrom(typeof(Controller<>))).ToList(); - types = types.Concat(SimplifyWebTypesFinder.FindTypesDerivedFrom(typeof(AsyncController<>))).ToList(); - - var typesToIgnore = new List(); + return _controllersMetaData = LoadMetaData(); + } + } - var ignoreContainingClass = SimplifyWebTypesFinder - .GetAllTypes() - .FirstOrDefault(t => t.IsDefined(typeof(IgnoreControllersAttribute), true)); + private IList LoadMetaData() + { + var types = SimplifyWebTypesFinder.FindTypesDerivedFrom(); + types = types.Concat(SimplifyWebTypesFinder.FindTypesDerivedFrom(typeof(Controller2<>))).ToList(); + types = types.Concat(SimplifyWebTypesFinder.FindTypesDerivedFrom()).ToList(); + types = types.Concat(SimplifyWebTypesFinder.FindTypesDerivedFrom()).ToList(); + types = types.Concat(SimplifyWebTypesFinder.FindTypesDerivedFrom(typeof(Controller<>))).ToList(); + types = types.Concat(SimplifyWebTypesFinder.FindTypesDerivedFrom(typeof(AsyncController<>))).ToList(); - if (ignoreContainingClass != null) - { - var attributes = ignoreContainingClass.GetCustomAttributes(typeof(IgnoreControllersAttribute), false); + return LoadMetaData(types, GetTypesToIgnore()); + } - typesToIgnore.AddRange(((IgnoreControllersAttribute)attributes[0]).Types); - } + private static IEnumerable GetTypesToIgnore() + { + var ignoreContainingClass = SimplifyWebTypesFinder + .GetAllTypes() + .FirstOrDefault(t => t.IsDefined(typeof(IgnoreControllersAttribute), true)); - LoadMetaData(controllersMetaContainers, types, typesToIgnore); + if (ignoreContainingClass == null) + return new List(); - return _controllersMetaData = controllersMetaContainers; - } - } + var attributes = ignoreContainingClass.GetCustomAttributes(typeof(IgnoreControllersAttribute), false); - private void LoadMetaData(ICollection controllersMetaContainers, IEnumerable types, IEnumerable typesToIgnore) - { - foreach (var t in types.Where(t => typesToIgnore.All(x => x.FullName != t.FullName) && - controllersMetaContainers.All(x => x.ControllerType != t))) - BuildControllerMetaData(controllersMetaContainers, t); + return ((IgnoreControllersAttribute)attributes[0]).Types; } - private void BuildControllerMetaData(ICollection controllersMetaContainers, Type controllerType) => - controllersMetaContainers.Add(_metaDataFactory.CreateControllerMetaData(controllerType)); + private IList LoadMetaData(IEnumerable types, IEnumerable typesToIgnore) => + types.Where(t => typesToIgnore.All(x => x.FullName != t.FullName)) + .Select(_metaDataFactory.CreateControllerMetaData) + .ToList(); } \ No newline at end of file