public async Task<object> Send(QueryRequest query) { var typeInformation = new QueryRequestTypeInformation(query); var queryObject = JsonConvert.DeserializeObject(query.QueryData, typeInformation.QueryType); var handlerType = typeof(IQueryHandler<,>).MakeGenericType(typeInformation.QueryType, typeInformation.ResultType); var handler = serviceLocator.Resolve(handlerType); var sendMethodInfo = handlerType.GetMethod("Send"); return await (dynamic)sendMethodInfo.Invoke(handler, new[] { queryObject }); }
public QueryRequestTypeInformation(QueryRequest query) { this.QueryType = Type.GetType(query.QueryTypeName); this.ResultType = this.QueryType.GetInterfaces().Single(i => i.Name.Contains("IQuery")).GetGenericArguments()[0]; }