>
> I'm stupid). I forgot to add dependency injection in startup.cs for my
> Controller. I had a few good suggestions from people which I've included. I
> haven't checked if the code from my first post works, but the attached code
> does.
>
*startup.cs*
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddMvc();
services.AddSingleton<ITodoRepository, TodoRepository>();
}
--
You received this message because you are subscribed to the Google Groups
"AngularJS" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/angular.
For more options, visit https://groups.google.com/d/optout.
using Microsoft.AspNet.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using TodoApi.Models;
namespace TodoApi.Controllers
{
[Route("api/[controller]")]
public class TodoController : Controller
{
[FromServices]
public ITodoRepository TodoItems { get; set; }
[HttpGet]
public IEnumerable<TodoItem> GetAll()
{
return TodoItems.GetAll().OrderBy(x=>x.Name);
}
[HttpGet("{id}", Name = "GetTodo")]
public IActionResult GetById(string id)
{
var item = TodoItems.Find(id);
if (item == null)
{
return HttpNotFound();
}
return new ObjectResult(item);
}
[HttpPost]
public IActionResult Create([FromBody] TodoItem item)
{
if (item == null)
{
return HttpBadRequest();
}
TodoItems.Add(item);
return CreatedAtRoute("GetTodo", new { controller = "Todo", id = item.Key }, item);
}
[HttpPut("{id}")]
public IActionResult Update(string id, [FromBody] TodoItem item)
{
if (item == null || item.Key != id)
{
return HttpBadRequest();
}
var todo = TodoItems.Find(id);
if (todo == null)
{
return HttpNotFound();
}
TodoItems.Update(item);
return new NoContentResult();
}
[HttpDelete("{id}")]
public void Delete(string id)
{
TodoItems.Remove(id);
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace TodoApi.Models
{
public interface ITodoRepository
{
void Add(TodoItem item);
IEnumerable<TodoItem> GetAll();
TodoItem Find(string key);
TodoItem Remove(string key);
void Update(TodoItem item);
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace TodoApi.Models
{
public class TodoItem
{
public string Key { get; set; }
public string Name { get; set; }
public bool IsComplete { get; set; }
}
}
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace TodoApi.Models
{
public class TodoRepository : ITodoRepository
{
static ConcurrentDictionary<string, TodoItem> _todos = new ConcurrentDictionary<string, TodoItem>();
public TodoRepository()
{
Add(new TodoItem { Name = "Item1" });
}
public IEnumerable<TodoItem> GetAll()
{
return _todos.Values;
}
public void Add(TodoItem item)
{
item.Key = Guid.NewGuid().ToString();
_todos[item.Key] = item;
}
public TodoItem Find(string key)
{
TodoItem item;
_todos.TryGetValue(key, out item);
return item;
}
public TodoItem Remove(string key)
{
TodoItem item;
_todos.TryGetValue(key, out item);
_todos.TryRemove(key, out item);
return item;
}
public void Update(TodoItem item)
{
_todos[item.Key] = item;
}
}
}
import { Inject, Component } from 'angular2/core';
import { DataService } from './data.service';
import { HTTP_BINDINGS } from 'angular2/http';
import { TodoItem } from './TodoItem';
@Component({
selector: 'app',
bindings: [DataService, HTTP_BINDINGS],
template: `<h1>Hello World</h1>
<li *ngFor="#item of TodoItems">
<span>{{item.Name}}</span>
</li>
`
})
export class AppComponent {
public TodoItems: TodoItem[];
constructor( @Inject(DataService) public dataService: DataService) {
this.dataService = dataService;
}
ngOnInit() {
this.dataService.getItems()
.subscribe((TodoItems: TodoItem[]) => {
this.TodoItems = TodoItems;
});
}
}
import { bootstrap } from 'angular2/platform/browser';
import { AppComponent } from './app.component';
import { HTTP_PROVIDERS } from 'angular2/http';
bootstrap(AppComponent, [HTTP_PROVIDERS]);
import { Injectable, Inject } from 'angular2/core';
import { Http, Response } from 'angular2/http';
import 'rxjs/add/operator/map';
import {Observable} from 'rxjs/Observable';
import { TodoItem } from './TodoItem';
@Injectable()
export class DataService {
constructor( @Inject(Http) public http: Http) {
this.http = http;
}
getItems(): Observable<TodoItem> {
return this.http.get('/api/todo').map((res: Response) => res.json());
}
}
export interface TodoItem {
Key: string;
Name: string;
IsComplete: boolean;
}Title: Angular 2 QuickStart
Loading...