簡體   English   中英

在我的caled類具有構造函數時發布數據不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM