Skip to content

Commit 64e7126

Browse files
committed
Merge branch 'feature/#167' into develop
2 parents 2f9ef8e + d64f360 commit 64e7126

File tree

8 files changed

+67
-8
lines changed

8 files changed

+67
-8
lines changed

src/SampleApps/SampleApp.Classic/Controllers/Accounts/LoginController.cs

+4-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using System.Threading.Tasks;
44
using Microsoft.AspNetCore.Authentication;
55
using Microsoft.AspNetCore.Authentication.Cookies;
6+
using SampleApp.Classic.Infrastructure.Log;
67
using SampleApp.Classic.Models.Accounts;
78
using SampleApp.Classic.Views;
89
using SampleApp.Classic.Views.Accounts;
@@ -14,12 +15,14 @@
1415
namespace SampleApp.Classic.Controllers.Accounts
1516
{
1617
[Post("login")]
17-
public class LoginController : AsyncController<LoginViewModel>
18+
public class LoginController : LoggableController<LoginViewModel>
1819
{
1920
public override async Task<ControllerResponse> Invoke()
2021
{
2122
await ReadModelAsync();
2223

24+
Log("Login controller executed");
25+
2326
if (Model.Password == "1" && Model.UserName == "Foo")
2427
{
2528
var claims = new List<Claim>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
using System;
2+
using Simplify.Web;
3+
4+
namespace SampleApp.Classic.Infrastructure.Log;
5+
6+
public abstract class LoggableController<T> : AsyncController<T>
7+
where T : class
8+
{
9+
protected void Log(string message) => Console.WriteLine(message);
10+
}

src/Simplify.Web.Tests/Meta/ControllersMetaStoreTests.cs

+3-1
Original file line numberDiff line numberDiff line change
@@ -25,19 +25,21 @@ public void GetControllersMetaData_LocalControllers_GetWithoutIgnored()
2525

2626
factory.SetupSequence(x => x.CreateControllerMetaData(It.IsAny<Type>()))
2727
.Returns(new ControllerMetaData(typeof(TestController1), new ControllerExecParameters(null, 2)))
28+
.Returns(new ControllerMetaData(typeof(TestController6)))
2829
.Returns(new ControllerMetaData(typeof(TestController2), new ControllerExecParameters(null, 1)))
2930
.Returns(new ControllerMetaData(typeof(TestController4)))
3031
.Returns(new ControllerMetaData(typeof(TestController5)));
3132

3233
// Act
3334
var metaData = store.ControllersMetaData;
3435

35-
Assert.AreEqual(4, metaData.Count);
36+
Assert.AreEqual(5, metaData.Count);
3637

3738
factory.Verify(x => x.CreateControllerMetaData(It.Is<Type>(t => t == typeof(TestController1))));
3839
factory.Verify(x => x.CreateControllerMetaData(It.Is<Type>(t => t == typeof(TestController2))));
3940
factory.Verify(x => x.CreateControllerMetaData(It.Is<Type>(t => t == typeof(TestController4))));
4041
factory.Verify(x => x.CreateControllerMetaData(It.Is<Type>(t => t == typeof(TestController5))));
42+
factory.Verify(x => x.CreateControllerMetaData(It.Is<Type>(t => t == typeof(TestController6))));
4143
}
4244
}
4345
}

src/Simplify.Web.Tests/Meta/SimplifyWebTypesFinderTests.cs

+2-1
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,11 @@ public void FindTypesDerivedFrom_TypeHave3TypesDerived_3TestControllersReturned(
4848

4949
// Assert
5050

51-
Assert.AreEqual(2, types.Count);
51+
Assert.AreEqual(3, types.Count);
5252
Assert.AreEqual(1, types2.Count);
5353
Assert.AreEqual("Simplify.Web.Tests.TestEntities.TestController1", types[0].FullName);
5454
Assert.AreEqual("Simplify.Web.Tests.TestEntities.TestController3", types[1].FullName);
55+
Assert.AreEqual("Simplify.Web.Tests.TestEntities.TestController6", types[2].FullName);
5556
Assert.AreEqual("Simplify.Web.Tests.TestEntities.TestController2", types2[0].FullName);
5657
}
5758

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
namespace Simplify.Web.Tests.TestEntities
2+
{
3+
public abstract class ControllerBase : Controller
4+
{
5+
}
6+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
using System;
2+
3+
namespace Simplify.Web.Tests.TestEntities
4+
{
5+
public class TestController6 : ControllerBase
6+
{
7+
public override ControllerResponse Invoke() => throw new NotImplementedException();
8+
}
9+
}

src/Simplify.Web.sln.DotSettings

+1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
<s:Boolean x:Key="/Default/UserDictionary/Words/=Catched/@EntryIndexedValue">True</s:Boolean>
1717
<s:Boolean x:Key="/Default/UserDictionary/Words/=intellisense/@EntryIndexedValue">True</s:Boolean>
1818
<s:Boolean x:Key="/Default/UserDictionary/Words/=Katana/@EntryIndexedValue">True</s:Boolean>
19+
<s:Boolean x:Key="/Default/UserDictionary/Words/=Loggable/@EntryIndexedValue">True</s:Boolean>
1920
<s:Boolean x:Key="/Default/UserDictionary/Words/=middlewares/@EntryIndexedValue">True</s:Boolean>
2021
<s:Boolean x:Key="/Default/UserDictionary/Words/=Redirector/@EntryIndexedValue">True</s:Boolean>
2122
<s:Boolean x:Key="/Default/UserDictionary/Words/=Katana/@EntryIndexedValue">True</s:Boolean>

src/Simplify.Web/Meta/SimplifyWebTypesFinder.cs

+32-5
Original file line numberDiff line numberDiff line change
@@ -60,11 +60,25 @@ public static class SimplifyWebTypesFinder
6060
/// <param name="type">The type.</param>
6161
/// <returns></returns>
6262
public static IList<Type> FindTypesDerivedFrom(Type type) =>
63-
CurrentDomainAssembliesTypes.Where(t => t.BaseType != null
64-
&& ((t.BaseType.IsGenericType == false && t.BaseType == type)
65-
||
66-
(t.BaseType.IsGenericType && t.BaseType.GetGenericTypeDefinition() == type)))
67-
.ToList();
63+
CurrentDomainAssembliesTypes.Where(t =>
64+
{
65+
if (t.IsAbstract)
66+
return false;
67+
68+
if (t.BaseType == null)
69+
return false;
70+
71+
if (t.BaseType.IsTypeOf(type))
72+
return true;
73+
74+
if (t.BaseType.BaseType == null)
75+
return false;
76+
77+
if (t.BaseType.BaseType.IsTypeOf(type))
78+
return true;
79+
80+
return false;
81+
}).ToList();
6882

6983
/// <summary>
7084
/// Gets all types.
@@ -102,6 +116,19 @@ public static void CleanLoadedTypesAndAssembliesInfo()
102116
_currentDomainAssembliesTypes = null;
103117
}
104118

119+
private static bool IsTypeOf(this Type t, Type type)
120+
{
121+
switch (t.IsGenericType)
122+
{
123+
case false when t == type:
124+
case true when t.GetGenericTypeDefinition() == type:
125+
return true;
126+
127+
default:
128+
return false;
129+
}
130+
}
131+
105132
private static IEnumerable<Type> GetAssembliesTypes(IEnumerable<Assembly> assemblies)
106133
{
107134
var types = new List<Type>();

0 commit comments

Comments
 (0)