NullReferenceException при работе с ObjectBuilder при реализации шаблона MVP - PullRequest
0 голосов
/ 10 марта 2010

Я использую шаблон MVP в своем приложении. Но я получаю исключение NullReferenceException на Page_Load моего класса просмотра. Вот мой класс ведущего:

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; использование Microsoft.Practices.ObjectBuilder;

открытый частичный класс _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();
    }
}

}

при запуске приложения я получаю исключение NullreferenceException в методе Page_Load, как _presenter имеет значение null. Потому что это никогда не называется. Итак, что я должен сделать, чтобы 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);
      }

    }

Может кто-нибудь, пожалуйста, выяснить, в чем проблема ...

1 Ответ

0 голосов
/ 10 марта 2010

Я думаю, у вас может быть одна из двух следующих проблем: установщик свойства Presenter вообще не вызывается или вызывается, но присваивается значение 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...