当我的caled类有构造函数时发布数据不起作用

时间:2016-09-09 10:40:54

标签: c# angularjs post

在C#中,我有以下代码:

using System;
using Android.App;
using Android.Content;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;
using Android.Gms.Maps;

namespace App14
{
    [Activity(Label = "App14", MainLauncher = true, Icon = "@drawable/icon")]
    public class MainActivity : Activity , IOnMapReadyCallback
    {

        GoogleMap mMap; 
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);

            // Set our view from the "main" layout resource
            SetContentView(Resource.Layout.Main);

            // Get our button from the layout resource,
            // and attach an event to it
            SetUpMap();
        }

        void IOnMapReadyCallback.OnMapReady(GoogleMap googleMap)
        {
            mMap = googleMap;
 
        }

        private void SetUpMap()
        {

            if (mMap == null)
            {
                FragmentManager.FindFragmentById<MapFragment>(Resource.Id.map).GetMapAsync(this);
            }
        }
    }
}

当我在角度调用函数WidgetGridGetList时会被忽略

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

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

但当我删除一个构造函数时,它工作。那是为什么?

2 个答案:

答案 0 :(得分:1)

我建议你阅读article

想一想。这是一个类,每个请求都需要创建一个控制器实例,然后调用所需的方法(动作)。

当您删除自定义构造函数时,C#会自动创建一个隐藏的默认公共构造函数。

public MeasurementListController() : base()
{

}

但是,当您声明自定义构造函数时,则没有默认的无参数构造函数。此时,如何根据请求创建控制器? _mlS的价值是多少?这就是问题所在。

在工作案例中,请求可以使用new MeasurementListController()轻松地通过反射创建控制器的实例。但是当你引入新的构造函数时,它需要传递MeasurementListService类型的参数,这种情况在这种情况下是不可能的,因为它没有[new MeasurementListController(???)]。

要解决此问题,您需要引入默认构造函数:

readonly MeasurementListService _mlS;

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

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

答案 1 :(得分: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");

这就是整个周期。