猿问

如何将模型的实例添加到列表

我正在没有数据库的情况下通过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变量来执行此操作吗?


我需要在我的服务类别中添加一个方法吗?


任何想法将不胜感激!


隔江千里
浏览 156回答 2
2回答

慕妹3146593

您的代码有很多问题。首先,您在getter(Things)中做得太多。就其性质而言,属性应该是轻量级的数据访问成员。如果您需要繁重的工作,那就是考虑使用方法而不是属性。这样一来,您就会遇到一个问题:每次有人访问您的列表时,都将对其进行重新构建,因为这就是您的getter内在的逻辑;您每次实例化并重新构建列表。第三,您需要在课外提供对财产的访问权限。目前您的Things财产是private,因此将其更改为public或internal。这是一种简单的方法:public&nbsp;List<Thing>&nbsp;Things&nbsp;{&nbsp;get;&nbsp;}&nbsp;=&nbsp;new&nbsp;List<Thing>();这是一个公共属性(您可以在类外部访问),该属性在构造类时实例化列表,并提供对列表的只读访问权限,即无法为其分配新的列表实例。这是您可以在另一个类中使用它的方法:this._thingService.Things.Add(...);
随时随地看视频慕课网APP
我要回答