tags:

views:

93

answers:

1

Hi All,

I am implementing MVP pattern in my application. But I am getting NullReferenceException on the Page_Load of my view class. Here is my presenter class:

using Microsoft.Practices.CompositeWeb;

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

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

and here is code behind class of my view:

using System; using 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();
    }
}

}

while running the application I am getting NullreferenceException in the Page_Load method, as _presenter is null. Because it's never called. So, what should i do so that ObjectBuilder can call it before the page life cycle begins..

My base page class is:

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);
      }

    }

Can someone please figure out where is the problem...

A: 

I think you may have one of two following problems: setter of the Presenter property is not called at all or it is called but null is assigned. I think you should try to put a break point in the setter of Presenter property to see what is happening.

You can try overriding 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);
}
Andrew Bezzub
yes, it's never called...what do i need to do so that it can be called....
Praveen
Try calling ObjectFactory.BuildUp method (I've updated my answer with example).
Andrew Bezzub
where is ObjectFactory class defined , i mean in which namespace ?
Praveen