[英]Posting data when my caled class has a constructor does not work
在C#中,我有以下代碼:
public class MeasurementListController : BaseController
{
readonly MeasurementListService _mlS;
public MeasurementListController(MeasurementListService mlS)
{
_mlS = mlS;
}
[HttpPost]
public ActionResult WidgetGridGetList()
{
return JsonData(_mlS.GetMeasurementDataGridList());
}
}
當我以角度調用函數WidgetGridGetList時,它將被忽略
$http.post("MeasurementList/WidgetGridGetList");
但是當我刪除一個構造函數時,它可以工作。 這是為什么?
我建議您閱讀這篇文章 。
想一想。 這是一個類,每個請求都需要創建一個控制器實例,然后調用所需的方法(動作)。
刪除自定義構造函數時,C#自動創建一個隱藏的默認公共構造函數。
public MeasurementListController() : base()
{
}
但是,在聲明自定義構造函數時,沒有默認的無參數構造函數。 此時,如何為每個請求創建一個控制器? _mlS
的值是_mlS
? 這就是問題所在。
在工作情況下,該請求可以使用new MeasurementListController()
通過反射輕松創建控制器的實例。 但是,當您引入新的構造函數時,它需要傳遞一個MeasurementListService
類型的參數,在這種情況下這是不可能的,因為它沒有[ new MeasurementListController(???)
]。
為了解決這個問題,您需要引入一個默認的構造函數:
readonly MeasurementListService _mlS;
public MeasurementListController()
{
_mlS = /* some default value */;
}
public MeasurementListController(MeasurementListService mlS)
{
_mlS = mlS;
}
這不是我的代碼。 我只是想解決一些問題。
整個周期如下所示:
控制器:
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");
這就是整個周期。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.