2016-05-24 8 views
1

が含まれています、私はこの記事を読んでいます:WEBAPI、マイクロソフトの記事を読んだが、エラー

https://docs.asp.net/en/latest/tutorials/first-web-api.htmlを。

と言われています。

using System.Collections.Generic; 
using Microsoft.AspNetCore.Mvc; 
using TodoApi.Models; 

    namespace TodoApi.Controllers 
    { 
     [Route("api/[controller]")] 
     public class TodoController : Controller 
     { 
      public TodoController(ITodoRepository todoItems) 
      { 
       TodoItems = todoItems; 
      } 
     } 
    } 

しかしTodoItemsが宣言されて:あなたはこれを置く必要がありますか?

何か問題がありますか?それとも、記事で間違っていますか?

私はファイルでこれを置く場合ので:

public ITodoRepository TodoItems { get; private set; }   

エラーが表示されなくなります。しかしこれは正しいのですか?

+0

チュートリアルはgithubプロジェクトから生成され、行番号でファイルからのコードが含まれています。 '公共ITodoRepository TodoItems {get;セット; } 'は、[ソースファイル]のコントローラのコンストラクタの下の行に表示されます(https://github.com/aspnet/Docs/blob/master/aspnet/tutorials/first-web-api/sample/src/TodoApi/Controllers /TodoController.cs)、私はそれがちょうど少しオフになっている行番号だと思います。 – TZHX

+0

ありがとう、非常に良い – InfinityGoesAround

答えて

1

おそらく間違いでしょう。

public class TodoController : Controller 
    { 
     private readonly ITodoRepository TodoItems; 

     public TodoController(ITodoRepository todoItems) 
     { 
      TodoItems = todoItems; 
     } 
    } 

ここでは、コンストラクタによってdependency injectionを使用しています。
TodoItemspublicというプロパティとして宣言するのは良い考えではないと思います。 private readonlyフィールドはコンストラクタでのみ初期化されます。それ以外の場合は、継承を使用する場合はprotectedと宣言される可能性があります。

+1

ありがとう。今すぐです。 – InfinityGoesAround

+0

助けてくれてうれしいです。 – Marusyk

+0

一般的な推奨事項:プライベートフィールドの名前付け規約(_todoItemsなど)を使用することを検討してください。また、誰かがnull値でインスタンス化しようとしたときにクラスがインスタンス化されるのを防ぐために、コンストラクタにガード句を入れて、意味のある例外をスローすることをお勧めします。 – Jeroen1984

関連する問題