private async Task <bool> DispatchToHandler <T, TKey>(HttpListenerContext context, object handler, string httpMethod, SerializationToUse serializationToUse) { return(await Task.Run(async() => { MethodInfo method = typeof(VerbRouteActioner).GetMethod("CreateVerbHandler", BindingFlags.NonPublic | BindingFlags.Instance); MethodInfo generic = method.MakeGenericMethod(new[] { typeof(T), typeof(TKey) }); IVerbHandler <T, TKey> actualHandler = (IVerbHandler <T, TKey>)generic.Invoke(this, new[] { handler }); var result = false; switch (httpMethod) { case "GET": result = await HandleGet <T, TKey>(actualHandler, context, serializationToUse); break; case "PUT": result = await HandlePut <T, TKey>(actualHandler, context, serializationToUse); break; case "POST": result = await HandlePost <T, TKey>(actualHandler, context, serializationToUse); break; case "DELETE": result = await HandleDelete <T, TKey>(actualHandler, context, serializationToUse); break; } return result; })); }
private void HandleGenerate(GenerateOptions options) { container.RegisterInstance(options); container.RegisterInstance <Options>(options); IVerbHandler handler = container.Resolve <GenerateHandler>(); handler.Run(); }
private void HandleNew(NewOptions options) { container.RegisterInstance(options); container.RegisterInstance <Options>(options); IVerbHandler handler = container.Resolve <NewHandler>(); handler.Run(); }
private async Task <bool> HandleDelete <T, TKey>(IVerbHandler <T, TKey> actualHandler, HttpListenerContext context, SerializationToUse serializationToUse) { return(await Task.Run(async() => { TKey id = await restMethodActioner.ExtractId <TKey>(context.Request); bool updatedOk = await actualHandler.Delete(id); updatedOk &= await restMethodActioner.SetOkResponse(context); return updatedOk; })); }
private async Task <bool> HandlePost <T, TKey>(IVerbHandler <T, TKey> actualHandler, HttpListenerContext context, SerializationToUse serializationToUse) { return(await Task.Run(async() => { T item = await restMethodActioner.ExtractContent <T>(context.Request, serializationToUse); T itemAdded = await actualHandler.Post(item); bool result = await restMethodActioner.SetResponse <T>(context, itemAdded, serializationToUse); return result; })); }
private async Task <bool> HandleGet <T, TKey>(IVerbHandler <T, TKey> actualHandler, HttpListenerContext context, SerializationToUse serializationToUse) { return(await Task.Run(async() => { var result = false; if (restMethodActioner.IsGetAll(context.Request.RawUrl)) { var items = await actualHandler.Get(); result = await restMethodActioner.SetResponse <List <T> >(context, items.ToList(), serializationToUse); } else { TKey id = await restMethodActioner.ExtractId <TKey>(context.Request); var item = await actualHandler.Get(id); result = await restMethodActioner.SetResponse <T>(context, item, serializationToUse); } return result; })); }
private void HandleNotParsed(IEnumerable <Error> errors) { IVerbHandler handler = container.Resolve <UnknownVerbHandler>(); handler.Run(); }