我正在没有数据库的情况下通过MVC教程进行工作。服务等级namespace Domain.Services{ public class ThingService { private List<Thing> _things; private List<Thing> Things { get { if (this._things == null) { this._things = new List<Thing>(); this._things.Add(new Thing() { ID = 1, Name = "The red thing", Color = "Red", Size = "Small", Length = 55, DateAvailable = DateTime.Parse("1/1/2018"), IsActive = true }); // Add more things } return this._things; } }控制器namespace WWW.Controllers{ public class HomeController : Controller { private readonly ThingService _thingService; public HomeController() { this._thingService = new ThingService(); } public ActionResult AddThing() { //add code for a new thing return View(); } }}我需要帮助将我的模型的新实例添加到列表(_things?Things?)。我尝试了服务类执行此操作的方式,并得到范围解析错误。我可以通过控制器中可用的_thingService变量来执行此操作吗?我需要在我的服务类别中添加一个方法吗?任何想法将不胜感激!
2 回答
慕妹3146593
TA贡献1820条经验 获得超9个赞
您的代码有很多问题。首先,您在getter(Things
)中做得太多。就其性质而言,属性应该是轻量级的数据访问成员。如果您需要繁重的工作,那就是考虑使用方法而不是属性。
这样一来,您就会遇到一个问题:每次有人访问您的列表时,都将对其进行重新构建,因为这就是您的getter内在的逻辑;您每次实例化并重新构建列表。
第三,您需要在课外提供对财产的访问权限。目前您的Things
财产是private
,因此将其更改为public
或internal
。
这是一种简单的方法:
public List<Thing> Things { get; } = new List<Thing>();
这是一个公共属性(您可以在类外部访问),该属性在构造类时实例化列表,并提供对列表的只读访问权限,即无法为其分配新的列表实例。这是您可以在另一个类中使用它的方法:
this._thingService.Things.Add(...);
- 2 回答
- 0 关注
- 155 浏览
添加回答
举报
0/150
提交
取消