在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());
}
}
但当我删除一个构造函数时,它工作。那是为什么?
答案 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");
这就是整个周期。