Skip to content

Commit 7e12387

Browse files
authored
Merge pull request #28 from softlgl/dev
重构代码
2 parents 041684e + 16af29c commit 7e12387

2 files changed

Lines changed: 44 additions & 38 deletions

File tree

src/DotNetCoreRpc.Core/RpcFilterUtils.cs

Lines changed: 43 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,20 +11,59 @@ namespace DotNetCoreRpc.Core
1111
public static class RpcFilterUtils
1212
{
1313
private static readonly ConcurrentDictionary<string, IEnumerable<PropertyInfo>> _filterFromServices = new ConcurrentDictionary<string, IEnumerable<PropertyInfo>>();
14-
public static RpcFilterAttribute GetInstance(IServiceProvider serviceProvider,Type filterType)
14+
private static readonly ConcurrentDictionary<string, List<RpcFilterAttribute>> _methodFilters = new ConcurrentDictionary<string, List<RpcFilterAttribute>>();
15+
16+
/// <summary>
17+
/// 获取方法filters
18+
/// </summary>
19+
/// <returns></returns>
20+
public static List<RpcFilterAttribute> GetFilterAttributes(RpcContext aspectContext, IEnumerable<Type> filterTypes)
1521
{
16-
return ActivatorUtilities.CreateInstance(serviceProvider, filterType) as RpcFilterAttribute;
22+
var methondInfo = aspectContext.Method;
23+
24+
var methondInterceptorAttributes = _methodFilters.GetOrAdd($"{methondInfo.DeclaringType.FullName}#{methondInfo.Name}",
25+
key => {
26+
var methondAttributes = methondInfo.GetCustomAttributes(true)
27+
.Where(i => typeof(RpcFilterAttribute).IsAssignableFrom(i.GetType()))
28+
.Cast<RpcFilterAttribute>().ToList();
29+
var classAttributes = methondInfo.DeclaringType.GetCustomAttributes(true)
30+
.Where(i => typeof(RpcFilterAttribute).IsAssignableFrom(i.GetType()))
31+
.Cast<RpcFilterAttribute>();
32+
//获取方法filter
33+
methondAttributes.AddRange(classAttributes);
34+
//获取全局filter
35+
var glableInterceptorAttribute = GetInstances(aspectContext.HttpContext.RequestServices, filterTypes);
36+
methondAttributes.AddRange(glableInterceptorAttribute);
37+
return methondAttributes;
38+
});
39+
40+
//filter属性注入
41+
PropertiesInject(aspectContext.HttpContext.RequestServices, methondInterceptorAttributes);
42+
return methondInterceptorAttributes;
1743
}
1844

19-
public static IEnumerable<RpcFilterAttribute> GetInstances(IServiceProvider serviceProvider, IEnumerable<Type> filterTypes)
45+
private static IEnumerable<RpcFilterAttribute> GetInstances(IServiceProvider serviceProvider, IEnumerable<Type> filterTypes)
2046
{
2147
foreach (var filterType in filterTypes)
2248
{
2349
yield return GetInstance(serviceProvider, filterType);
2450
}
2551
}
2652

27-
public static void PropertieInject(IServiceProvider serviceProvider, RpcFilterAttribute rpcFilterAttribute)
53+
private static RpcFilterAttribute GetInstance(IServiceProvider serviceProvider, Type filterType)
54+
{
55+
return ActivatorUtilities.CreateInstance(serviceProvider, filterType) as RpcFilterAttribute;
56+
}
57+
58+
private static void PropertiesInject(IServiceProvider serviceProvider, IEnumerable<RpcFilterAttribute> rpcFilterAttributes)
59+
{
60+
foreach (var fitler in rpcFilterAttributes)
61+
{
62+
PropertieInject(serviceProvider, fitler);
63+
}
64+
}
65+
66+
private static void PropertieInject(IServiceProvider serviceProvider, RpcFilterAttribute rpcFilterAttribute)
2867
{
2968
var properties = _filterFromServices.GetOrAdd($"{rpcFilterAttribute.GetType().FullName}", key => rpcFilterAttribute.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic).Where(i => i.GetCustomAttribute<FromServicesAttribute>() != null));
3069
if (properties.Any())
@@ -35,13 +74,5 @@ public static void PropertieInject(IServiceProvider serviceProvider, RpcFilterAt
3574
}
3675
}
3776
}
38-
39-
public static void PropertiesInject(IServiceProvider serviceProvider, IEnumerable<RpcFilterAttribute> rpcFilterAttributes)
40-
{
41-
foreach (var fitler in rpcFilterAttributes)
42-
{
43-
PropertieInject(serviceProvider, fitler);
44-
}
45-
}
4677
}
4778
}

src/DotNetCoreRpc.Server/DotNetCoreRpcMiddleware.cs

Lines changed: 1 addition & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ public class DotNetCoreRpcMiddleware
1818
{
1919
private readonly IDictionary<string, Type> _serviceTypes;
2020
private readonly IEnumerable<Type> _filterTypes;
21-
private readonly ConcurrentDictionary<string, List<RpcFilterAttribute>> _methodFilters = new ConcurrentDictionary<string, List<RpcFilterAttribute>>();
2221

2322
public DotNetCoreRpcMiddleware(RequestDelegate next, RpcServerOptions rpcServerOptions)
2423
{
@@ -111,7 +110,7 @@ private AspectPiplineBuilder CreatPipleline(RpcContext aspectContext)
111110
await aspectContext.HttpContext.Response.WriteAsync(responseModel.ToJson());
112111
});
113112

114-
List<RpcFilterAttribute> interceptorAttributes = GetFilterAttributes(aspectContext);
113+
List<RpcFilterAttribute> interceptorAttributes = RpcFilterUtils.GetFilterAttributes(aspectContext, _filterTypes);
115114
if (interceptorAttributes.Any())
116115
{
117116
foreach (var item in interceptorAttributes)
@@ -166,29 +165,5 @@ private static RpcRequestDelegate PiplineEndPoint(object instance, RpcContext as
166165
return;
167166
};
168167
}
169-
170-
/// <summary>
171-
/// 获取Attribute
172-
/// </summary>
173-
/// <returns></returns>
174-
private List<RpcFilterAttribute> GetFilterAttributes(RpcContext aspectContext)
175-
{
176-
var methondInfo = aspectContext.Method;
177-
var methondInterceptorAttributes = _methodFilters.GetOrAdd($"{methondInfo.DeclaringType.FullName}#{methondInfo.Name}",
178-
key=>{
179-
var methondAttributes = methondInfo.GetCustomAttributes(true)
180-
.Where(i => typeof(RpcFilterAttribute).IsAssignableFrom(i.GetType()))
181-
.Cast<RpcFilterAttribute>().ToList();
182-
var classAttributes = methondInfo.DeclaringType.GetCustomAttributes(true)
183-
.Where(i => typeof(RpcFilterAttribute).IsAssignableFrom(i.GetType()))
184-
.Cast<RpcFilterAttribute>();
185-
methondAttributes.AddRange(classAttributes);
186-
var glableInterceptorAttribute = RpcFilterUtils.GetInstances(aspectContext.HttpContext.RequestServices, _filterTypes);
187-
methondAttributes.AddRange(glableInterceptorAttribute);
188-
return methondAttributes;
189-
});
190-
RpcFilterUtils.PropertiesInject(aspectContext.HttpContext.RequestServices, methondInterceptorAttributes);
191-
return methondInterceptorAttributes;
192-
}
193168
}
194169
}

0 commit comments

Comments
 (0)