天冬氨酸。 Net MVC私有成员价值丢失

时间:2018-04-22 16:39:15

标签: c# asp.net asp.net-mvc

我是我的asp。 Ne MVC我正在使用N_layrs架构(商品,服务,验证,数据和预设层)。我创建了一个控制器来查看一些数据。我实现了对控制器abd的表示界面我实现了显示方法(这个方法将从系统层检索数据并调用表示接口方法来识别我的值)在实现的接口方法中我将后面的项目变量赋值给本地私有变量但是当我将此列表分配给View方法时,该值为null。

    public class AgreementController : Controller, IListView<IList<AgreementModel>>
{
    private static ListPresenter<AgreementModel> _agreementListPresenter;

//This is the private member
    private IList<AgreementModel> _items;
    public RequestType RequestType
    {
        get
        {
            return RequestType.FindAll;
        }
    }

    public string ListErrorMessage
    {
        set
        {
        }
    }

    // GET: Agreement
    public ActionResult Index()
    {
    //Some unity code for DI
        IUnityContainer unityContainer = new UnityContainer();
        unityContainer.RegisterType<IListView<IList<AgreementModel>>, AgreementController>();
        unityContainer.RegisterType<Service<IBusinessService<AgreementModel>, AgreementModel>>();
        unityContainer.RegisterType<IBusinessService<AgreementModel>, BusinessService<AgreementModel>>();
        unityContainer.RegisterType<IRepository<AgreementModel>, AgreementRepository>();
        unityContainer.RegisterType<Service<IBusinessService<PlanModel>, PlanModel>>();
        unityContainer.RegisterType<IBusinessService<PlanModel>, BusinessService<PlanModel>>();
        unityContainer.RegisterType<IRepository<PlanModel>, PlanRepository>();
        unityContainer.RegisterType<IValidator<AgreementModel>, AgreementValidator<AgreementModel>>();
        unityContainer.RegisterType<IValidator<PlanModel>, PlanValidator<PlanModel>>();

    //Create the Presenter this will fire DisplayList
    _agreementListPresenter = unityContainer.Resolve<ListPresenter<AgreementModel>>();
        _agreementListPresenter.Display();
    //The value here is NULL
        return View(_items);
    }

    public void DisplayList(IList<AgreementModel> items)
    {
    //I recieved vale here and it is OK
        _items = items;
    }
}

}

  

这解决了我的问题

unityContainer.RegisterInstance<IListView<IList<AgreementModel>>>(this);
  

通过这个我regester当前控制器对象创建新的

1 个答案:

答案 0 :(得分:0)

快速回答。

看起来你通过Unity实例化了一个新的AgreementController,它可能会在你的百万个类中的某个地方设置自己的项目列表。

但View会从您调用的Controller中发送项目列表。不是你实施的那个。

答案很长。

您应该将所有依赖注入代码移动到App Startup或Global.ascx点。它在应用启动时调用,而不是在请求页面时调用。

您的AgreementController应该有一个构造函数,其中包含所需服务的参数。 Unity将创建控制器并注入您在global.ascx

中注册的服务