2010-03-10 46 views
0

我在应用程序中实现了MVP模式。 但我在我的视图类的Page_Load上得到NullReferenceException。 这里是我的演讲类:在使用ObjectBuilder实现MVP模式时使用NullReferenceException

using Microsoft.Practices.CompositeWeb; 

namespace PresenterDLL 
{ 
    public class NamePresenter : Presenter<IProduct> 
    { 
     public void SayHello() 
     { 
      View.Name = 200;    
     } 
    } 

    public interface IProduct 
    { 
     int Name { get; set; } 
    } 
} 

,这里是隐藏类我的看法代码:

使用系统; 使用PresenterDLL; using Microsoft.Practices.ObjectBuilder;

public partial class _Default:BasePage,IProduct { Private NamePresenter _presenter;

[CreateNew] 
public NamePresenter Presenter 
{ 
    set 
    { 
     this._presenter = value; 
     _presenter.View = this; 
    } 
} 

protected void Page_Load(object sender, EventArgs e) 
{ 


    if (!IsPostBack) 
    { 
     this._presenter.OnViewInitialized(); 
     this._presenter.SayHello(); 
    } 

    this._presenter.OnViewLoaded(); 
} 

public int Name 
{ 
    get 
    { 
     return 10; 
    } 
    set 
    { 
     TextBox1.Text = value.ToString(); 
    } 
} 

}

一边跑,我在Page_Load方法得到的NullReferenceException的应用程序,如 是_presenter空。因为它从来没有被调用。所以,我应该怎么做才能让ObjectBuilder的可以在页面生命周期开始之前把它..

我的基本页面类是:

public class BasePage : Microsoft.Practices.CompositeWeb.Web.UI.Page 
    { 
     public BasePage() 
      : base() 
     { 

      // _ctlForm = this; 
      // WebClientApplication.BuildItemWithCurrentContext(this); 
     } 

     protected override void OnInit(EventArgs e) 
     {  

      base.OnInit(e); 
      //Disable all caching 
      Response.CacheControl = "no-cache"; 
      Response.AddHeader("Pragma", "no-cache"); 
      Response.Expires = -1;   
     } 

     protected override void OnPreInit(EventArgs e) 
     { 
      //This has been moved to the top since the preinit in the base clase is responsible 
      //for dependency injections. 

      //ObjectFactory.BuildUp(this); 

      base.OnPreInit(e); 
     } 

     protected override void OnPreRender(EventArgs e) 
     { 

      base.OnPreRender(e); 
     } 

    } 

是否有人可以找出问题出在哪里?

+0

更换_Default:System.Web.UI.Page到_DEFAULT:PageBase(我不记得基地页面的名称,而是使用一些基本页面从框架) – garik 2010-03-10 08:32:06

回答

0

我想你可能会遇到以下两个问题之一:Presenter属性的setter根本没有被调用,或者它被调用,但分配了null。我想你应该试着在Presenter属性的设置者中设置一个断点来看看发生了什么。

你可以尝试重写PreInit(http://dotnetchris.wordpress.com/2009/02/16/creating-a-generic-model-view-presenter-framework/):

protected override void OnPreInit(EventArgs e) 
{ 
    ObjectFactory.BuildUp(this); 
    base.OnPreInit(e); 
} 
+0

是的,它从来没有被称为...我需要做什么,以便它可以被称为.... – 2010-03-10 08:24:24

+0

尝试调用ObjectFactory.BuildUp方法(我用例子更新了我的答案)。 – 2010-03-10 08:59:59

+0

其中是ObjectFactory类的定义,我的意思是在哪个命名空间? – 2010-03-11 04:36:59