Skip to content

Commit

Permalink
[#227] [r] more readable and cleaner code
Browse files Browse the repository at this point in the history
  • Loading branch information
i4004 committed Jan 21, 2024
1 parent b864bcf commit 005bf61
Showing 1 changed file with 27 additions and 29 deletions.
56 changes: 27 additions & 29 deletions src/Simplify.Web/Meta/ControllersMetaStore.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using Simplify.Web.Attributes.Setup;

Expand Down Expand Up @@ -38,41 +39,38 @@ public IList<IControllerMetaData> ControllersMetaData
if (_controllersMetaData != null)
return _controllersMetaData;

var controllersMetaContainers = new List<IControllerMetaData>();

var types = SimplifyWebTypesFinder.FindTypesDerivedFrom<Controller2>();
types = types.Concat(SimplifyWebTypesFinder.FindTypesDerivedFrom(typeof(Controller2<>))).ToList();
types = types.Concat(SimplifyWebTypesFinder.FindTypesDerivedFrom<Controller>()).ToList();
types = types.Concat(SimplifyWebTypesFinder.FindTypesDerivedFrom<AsyncController>()).ToList();
types = types.Concat(SimplifyWebTypesFinder.FindTypesDerivedFrom(typeof(Controller<>))).ToList();
types = types.Concat(SimplifyWebTypesFinder.FindTypesDerivedFrom(typeof(AsyncController<>))).ToList();

var typesToIgnore = new List<Type>();
return _controllersMetaData = LoadMetaData();
}
}

var ignoreContainingClass = SimplifyWebTypesFinder
.GetAllTypes()
.FirstOrDefault(t => t.IsDefined(typeof(IgnoreControllersAttribute), true));
private IList<IControllerMetaData> LoadMetaData()
{
var types = SimplifyWebTypesFinder.FindTypesDerivedFrom<Controller2>();
types = types.Concat(SimplifyWebTypesFinder.FindTypesDerivedFrom(typeof(Controller2<>))).ToList();
types = types.Concat(SimplifyWebTypesFinder.FindTypesDerivedFrom<Controller>()).ToList();
types = types.Concat(SimplifyWebTypesFinder.FindTypesDerivedFrom<AsyncController>()).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<Type> GetTypesToIgnore()
{
var ignoreContainingClass = SimplifyWebTypesFinder
.GetAllTypes()
.FirstOrDefault(t => t.IsDefined(typeof(IgnoreControllersAttribute), true));

LoadMetaData(controllersMetaContainers, types, typesToIgnore);
if (ignoreContainingClass == null)
return new List<Type>();

return _controllersMetaData = controllersMetaContainers;
}
}
var attributes = ignoreContainingClass.GetCustomAttributes(typeof(IgnoreControllersAttribute), false);

private void LoadMetaData(ICollection<IControllerMetaData> controllersMetaContainers, IEnumerable<Type> types, IEnumerable<Type> 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<IControllerMetaData> controllersMetaContainers, Type controllerType) =>
controllersMetaContainers.Add(_metaDataFactory.CreateControllerMetaData(controllerType));
private IList<IControllerMetaData> LoadMetaData(IEnumerable<Type> types, IEnumerable<Type> typesToIgnore) =>
types.Where(t => typesToIgnore.All(x => x.FullName != t.FullName))
.Select(_metaDataFactory.CreateControllerMetaData)
.ToList();
}

0 comments on commit 005bf61

Please sign in to comment.