Fixed Tapeti trying to publish return types of type Task
This commit is contained in:
parent
28cd486b50
commit
52ad9a4fc6
@ -54,11 +54,11 @@ namespace Tapeti.Flow.Default
|
|||||||
|
|
||||||
private static void RegisterYieldPointResult(IBindingContext context)
|
private static void RegisterYieldPointResult(IBindingContext context)
|
||||||
{
|
{
|
||||||
bool isTask;
|
bool isTaskOf;
|
||||||
if (!context.Result.Info.ParameterType.IsTypeOrTaskOf(typeof(IYieldPoint), out isTask))
|
if (!context.Result.Info.ParameterType.IsTypeOrTaskOf(typeof(IYieldPoint), out isTaskOf))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (isTask)
|
if (isTaskOf)
|
||||||
{
|
{
|
||||||
context.Result.SetHandler(async (messageContext, value) =>
|
context.Result.SetHandler(async (messageContext, value) =>
|
||||||
{
|
{
|
||||||
@ -92,8 +92,8 @@ namespace Tapeti.Flow.Default
|
|||||||
if (request?.Response == null)
|
if (request?.Response == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
bool isTask;
|
bool isTaskOf;
|
||||||
if (!context.Result.Info.ParameterType.IsTypeOrTaskOf(t => t == request.Response || t == typeof(IYieldPoint), out isTask))
|
if (!context.Result.Info.ParameterType.IsTypeOrTaskOf(t => t == request.Response || t == typeof(IYieldPoint), out isTaskOf))
|
||||||
throw new ResponseExpectedException($"Response of class {request.Response.FullName} expected in controller {context.Method.DeclaringType?.FullName}, method {context.Method.Name}");
|
throw new ResponseExpectedException($"Response of class {request.Response.FullName} expected in controller {context.Method.DeclaringType?.FullName}, method {context.Method.Name}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,13 +18,13 @@ namespace Tapeti.Default
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
||||||
bool isTask;
|
bool isTaskOf;
|
||||||
Type actualType;
|
Type actualType;
|
||||||
if (!context.Result.Info.ParameterType.IsTypeOrTaskOf(t => t.IsClass, out isTask, out actualType))
|
if (!context.Result.Info.ParameterType.IsTypeOrTaskOf(t => t.IsClass, out isTaskOf, out actualType))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
||||||
if (isTask)
|
if (isTaskOf)
|
||||||
{
|
{
|
||||||
var handler = GetType().GetMethod("PublishGenericTaskResult", BindingFlags.NonPublic | BindingFlags.Static).MakeGenericMethod(actualType);
|
var handler = GetType().GetMethod("PublishGenericTaskResult", BindingFlags.NonPublic | BindingFlags.Static).MakeGenericMethod(actualType);
|
||||||
|
|
||||||
|
@ -5,11 +5,18 @@ namespace Tapeti.Helpers
|
|||||||
{
|
{
|
||||||
public static class TaskTypeHelper
|
public static class TaskTypeHelper
|
||||||
{
|
{
|
||||||
public static bool IsTypeOrTaskOf(this Type type, Func<Type, bool> predicate, out bool isTask, out Type actualType)
|
public static bool IsTypeOrTaskOf(this Type type, Func<Type, bool> predicate, out bool isTaskOf, out Type actualType)
|
||||||
{
|
{
|
||||||
|
if (type == typeof(Task))
|
||||||
|
{
|
||||||
|
isTaskOf = false;
|
||||||
|
actualType = type;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Task<>))
|
if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Task<>))
|
||||||
{
|
{
|
||||||
isTask = true;
|
isTaskOf = true;
|
||||||
|
|
||||||
var genericArguments = type.GetGenericArguments();
|
var genericArguments = type.GetGenericArguments();
|
||||||
if (genericArguments.Length == 1 && predicate(genericArguments[0]))
|
if (genericArguments.Length == 1 && predicate(genericArguments[0]))
|
||||||
@ -19,21 +26,21 @@ namespace Tapeti.Helpers
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
isTask = false;
|
isTaskOf = false;
|
||||||
actualType = type;
|
actualType = type;
|
||||||
return predicate(type);
|
return predicate(type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static bool IsTypeOrTaskOf(this Type type, Func<Type, bool> predicate, out bool isTask)
|
public static bool IsTypeOrTaskOf(this Type type, Func<Type, bool> predicate, out bool isTaskOf)
|
||||||
{
|
{
|
||||||
Type actualType;
|
Type actualType;
|
||||||
return IsTypeOrTaskOf(type, predicate, out isTask, out actualType);
|
return IsTypeOrTaskOf(type, predicate, out isTaskOf, out actualType);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool IsTypeOrTaskOf(this Type type, Type compareTo, out bool isTask)
|
public static bool IsTypeOrTaskOf(this Type type, Type compareTo, out bool isTaskOf)
|
||||||
{
|
{
|
||||||
return IsTypeOrTaskOf(type, t => t == compareTo, out isTask);
|
return IsTypeOrTaskOf(type, t => t == compareTo, out isTaskOf);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user