2010-03-10 6 views
0

Je suis en train de mettre en œuvre un modèle MVP dans mon application. Mais je reçois NullReferenceException sur le Load Load de ma classe d'affichage. Voici ma classe de présentateur:NullReferenceException lorsque vous utilisez ObjectBuilder pour implémenter le modèle MVP

using Microsoft.Practices.CompositeWeb; 

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

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

et voici le code derrière la classe de mon point de vue:

using System; en utilisant PresenterDLL; en utilisant Microsoft.Practices.ObjectBuilder; Public partielle classe _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(); 
    } 
} 

}

lors de l'exécution de l'application que je reçois NullReferenceException dans la méthode Page_Load, comme _presenter est nulle. Parce que ça n'a jamais été appelé. Alors, que dois-je faire pour que ObjectBuilder peut l'appeler avant que le cycle de vie de la page commence ..

Ma classe de page de base est:

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

    } 

Quelqu'un peut-il s'il vous plaît savoir où est le problème ...

+0

remplacer _Default: System.Web.UI.Page à _default: PageBase (je ne me rappelle pas le nom de la page de base, mais utilise une page de base from framework) – garik

Répondre

0

Je pense que vous pouvez avoir l'un des deux problèmes suivants: setter de la propriété Presenter n'est pas appelée du tout ou elle est appelée mais null est assignée. Je pense que vous devriez essayer de mettre un point d'arrêt dans le setter de la propriété Presenter pour voir ce qui se passe.

Vous pouvez PreInit remplaçant (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

oui, il n'est jamais appelé ... que dois-je faire pour qu'il puisse être appelé .... –

+0

Essayez d'appeler la méthode ObjectFactory.BuildUp (j'ai mis à jour ma réponse avec un exemple). –

+0

où est définie la classe ObjectFactory, je veux dire dans quel espace de noms? –

Questions connexes