Commit e216564f authored by yangxiaodong's avatar yangxiaodong

refactor

parent 904a6933
......@@ -6,6 +6,7 @@ using System.Threading.Tasks;
using Cap.Consistency.Abstractions;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
namespace Cap.Consistency.Internal
{
......@@ -16,29 +17,15 @@ namespace Cap.Consistency.Internal
private readonly ObjectMethodExecutor _executor;
protected readonly ConsumerContext _consumerContext;
private Dictionary<string, object> _arguments;
public ConsumerInvoker(ILogger logger,
IServiceProvider serviceProvider,
ConsumerContext consumerContext,
ObjectMethodExecutor objectMethodExecutor) {
if (logger == null) {
throw new ArgumentNullException(nameof(logger));
}
if (consumerContext == null) {
throw new ArgumentNullException(nameof(consumerContext));
}
if (objectMethodExecutor == null) {
throw new ArgumentNullException(nameof(objectMethodExecutor));
}
ConsumerContext consumerContext) {
_logger = logger;
_logger = logger ?? throw new ArgumentNullException(nameof(logger));
_serviceProvider = serviceProvider;
_consumerContext = consumerContext;
_consumerContext = consumerContext ?? throw new ArgumentNullException(nameof(consumerContext));
_executor = ObjectMethodExecutor.Create(_consumerContext.ConsumerDescriptor.MethodInfo,
_consumerContext.ConsumerDescriptor.ImplType.GetTypeInfo());
_consumerContext.ConsumerDescriptor.ImplTypeInfo);
}
......@@ -50,8 +37,16 @@ namespace Cap.Consistency.Internal
try {
var obj = ActivatorUtilities.GetServiceOrCreateInstance(_serviceProvider, _consumerContext.ConsumerDescriptor.ImplType);
_executor.Execute(obj, null);
var obj = ActivatorUtilities.GetServiceOrCreateInstance(_serviceProvider, _consumerContext.ConsumerDescriptor.ImplTypeInfo.AsType());
var bodyString = Encoding.UTF8.GetString(_consumerContext.DeliverMessage.Body);
var firstParameter = _executor.MethodParameters[0];
object firstParameterObj = null;
if (firstParameter != null) {
firstParameterObj = JsonConvert.DeserializeObject(bodyString, firstParameter.ParameterType);
}
_executor.Execute(obj, firstParameterObj);
return Task.CompletedTask;
}
finally {
......@@ -65,75 +60,5 @@ namespace Cap.Consistency.Internal
}
}
private object _controller;
private async Task InvokeConsumerMethodAsync() {
var controllerContext = _consumerContext;
var executor = _executor;
var controller = _controller;
var arguments = _arguments;
var orderedArguments = ConsumerMethodExecutor.PrepareArguments(arguments, executor);
var logger = _logger;
object result = null;
try {
var returnType = executor.MethodReturnType;
if (returnType == typeof(void)) {
executor.Execute(controller, orderedArguments);
result = new object();
}
else if (returnType == typeof(Task)) {
await (Task)executor.Execute(controller, orderedArguments);
result = new object();
}
//else if (executor.TaskGenericType == typeof(IActionResult)) {
// result = await (Task<IActionResult>)executor.Execute(controller, orderedArguments);
// if (result == null) {
// throw new InvalidOperationException(
// Resources.FormatActionResult_ActionReturnValueCannotBeNull(typeof(IActionResult)));
// }
//}
//else if (executor.IsTypeAssignableFromIActionResult) {
// if (_executor.IsMethodAsync) {
// result = (IActionResult)await _executor.ExecuteAsync(controller, orderedArguments);
// }
// else {
// result = (IActionResult)_executor.Execute(controller, orderedArguments);
// }
// if (result == null) {
// throw new InvalidOperationException(
// Resources.FormatActionResult_ActionReturnValueCannotBeNull(_executor.TaskGenericType ?? returnType));
// }
//}
//else if (!executor.IsMethodAsync) {
// var resultAsObject = executor.Execute(controller, orderedArguments);
// result = resultAsObject as IActionResult ?? new ObjectResult(resultAsObject) {
// DeclaredType = returnType,
// };
//}
//else if (executor.TaskGenericType != null) {
// var resultAsObject = await executor.ExecuteAsync(controller, orderedArguments);
// result = resultAsObject as IActionResult ?? new ObjectResult(resultAsObject) {
// DeclaredType = executor.TaskGenericType,
// };
//}
//else {
// // This will be the case for types which have derived from Task and Task<T> or non Task types.
// throw new InvalidOperationException(Resources.FormatActionExecutor_UnexpectedTaskInstance(
// executor.MethodInfo.Name,
// executor.MethodInfo.DeclaringType));
//}
//_result = result;
// logger.ActionMethodExecuted(controllerContext, result);
}
finally {
}
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment