2016-09-09 12 views
0

を動作しません:私は、角に機能WidgetGridGetListを呼び出すときポスティングデータは、私は次のコードを持つC#では

public class MeasurementListController : BaseController 
{ 
    readonly MeasurementListService _mlS; 
    public MeasurementListController(MeasurementListService mlS) 
    { 
     _mlS = mlS; 
    } 

    [HttpPost] 
    public ActionResult WidgetGridGetList() 
    { 
     return JsonData(_mlS.GetMeasurementDataGridList()); 
    } 
} 

それが

$http.post("MeasurementList/WidgetGridGetList"); 

が、無視されます私はそれが動作するコンストラクタを削除します。何故ですか?

+0

別のParameterlessコンストラクタを用意する必要があります。 '_mlS'のデフォルト値を設定するpublic MeasurementListController {}' – user3185569

+0

パラメータを持つコンストラクタは何をしますか? – gypsyCoder

+0

サービスのクラスを初期化する – Jan

答えて

1

articleを読むことをお勧めします。

考えてみてください。これはクラスであり、各リクエストはコントローラのインスタンスを作成してから、必要なメソッド(アクション)を呼び出す必要があります。

カスタムコンストラクタを削除すると、C#は自動的に隠しデフォルトパブリックコンストラクタを作成します。

public MeasurementListController() : base() 
{ 

} 

ただし、カスタムコンストラクタを宣言すると、デフォルトのParameter-lessコンストラクタはありません。この時点で、要求ごとにコントローラを作成する方法はありますか? _mlSの値は何ですか?ここに問題があります。

作業中のケースでは、リクエストは、new MeasurementListController()を使用してコントローラのインスタンスを反映させることで簡単に作成できます。しかし、新しいコンストラクタを導入するときには、MeasurementListService型の引数を渡す必要があります。それには、それがないために不可能です[new MeasurementListController(???)]。

は、この問題を解決するには、デフォルトのコンストラクタを導入する必要があります。

readonly MeasurementListService _mlS; 

public MeasurementListController() 
{ 
    _mlS = /* some default value */; 
} 

public MeasurementListController(MeasurementListService mlS) 
{ 
    _mlS = mlS; 
} 
0

それは私のコードではありません。私はちょうどいくつかのものを修正しようとしています。

全体のサイクルは以下のようになります。

コントローラー:

public class MeasurementListController : BaseController 
{ 
    readonly MeasurementListService _mlS; 
    public MeasurementListController(MeasurementListService mlS) 
    { 
     _mlS = mlS; 
    } 

    [HttpPost] 
    public ActionResult WidgetGridGetList() 
    { 
     return JsonData(_mlS.GetMeasurementDataGridList());   
    } 
} 

サービス:

public class MeasurementListService 
{ 
    readonly MeasurementListRepository _mlR; 

    public MeasurementListService(MeasurementListRepository mlR) 
    { 
     _mlR = mlR; 
    } 

    public virtual IList<Location> GetMeasurementDataGridList() 
    { 
     return _mlR.GetLocations(); 
    } 
} 

リポジトリ:

public class MeasurementListRepository 
{ 
    readonly IDbConnection _db; 

    public MeasurementListRepository(IDbConnection db) 
    { 
     _db = db; 
    } 

    public IList<Location> GetLocations() 
    { 
     return _db.Query<Location>(@"select * from Location").ToList(); 
    } 
} 

やJSから呼び出し:

$http.post("MeasurementList/WidgetGridGetList"); 

全サイクルです。

関連する問題