2012-02-09 10 views
1

私はwinformユーザーコントロールを持っています。コンストラクタでは、依存関係をインスタンス化します。それは私はあなたが明示的Form.Close()を呼び出すまで加盟国が持続思っwinformコントロールの状態を理解する

public IProvider provider {get;set;} 

public MyUserControl() 
{ 
    InitializeComponent(); 
    provider = new MockProvider();//for testing. Will pass into constructor eventually 
} 

private void MyUserControl_Load(object sender, EventArgs e) 
{ 
    SomeModel model = new SomeModel(provider);//provider is null 
    //do work 
    model.InsertIntoDb(); 
} 

のようになります。では、なぜLoadイベントでプロバイダオブジェクトがnullですか?

+0

コントロールをロードする方法は? –

+0

@ Shadow Wizard - デザインビューでフォームにドロップしました。フォームのInitializeComponent()は、ユーザーコントロールをインスタンス化します。 –

+0

私はデザインビューがインスタンスを作成しないと信じています。確かに。エラーは実行時にも発生しますか? –

答えて

0

InitializeComponent()は、Provider = nullを「親」フォーム(ユーザーコントロールをインスタンス化するフォーム)内に設定していました。 winforms don't supportパラメータのないコンストラクタは非常にうまくいきます。

0

これは動作するはずです。新しいキーワードがコントロールのコンストラクタにあり、何かがそのコントロールをどこかでインスタンス化していることを確認してください。

2番目の機能の前にnewが呼び出されていることを確認してください。たぶん、これは別の方法です。状態は持続すべきである。

+0

2番目の関数はLoadイベントです。コンストラクタは、オブジェクトイベントの前に必ず呼び出されます。 –

関連する問題