6
public class StatisticsViewPresenter
{
    private IStatisticsView view;
    private Statistics statsModel;

    public StatisticsViewPresenter(IStatisticsView view, Statistics statsModel)
    {
        this.view = view;
        this.statsModel = statsModel;
    }
}

私はイベントを使用しません (ただし、問題を解決できる場合は喜んで使用します)。そのため、View クラスは次のようになります。

public class StatisticsForm : Form, IStatisticsView
{
    public StatisticsForm()
    {
        InitializeComponent();
    }

    [Inject]
    public StatisticsViewPresenter Presenter
    {
        private get;
        set;
    }
}

kernel.Bind<StatisticsPresenter>().ToSelf().InSingletonScope();
kernel.Bind<IStatisticsView>().To<StatisticsForm>();
kernel.Get<IStatisticsView>();

フォームを構築し、プレゼンターを構築してから、プレゼンターを Presenter プロパティに挿入します。すべてが桃色です。(そのシングルトン スコープのプレゼンターを除いて、それを行うためのより良い方法について何か考えはありますか? おそらく、プレゼンターのコンストラクター内のビューの Presenter プロパティに手動でプレゼンターを挿入するだけです: this.view.Presenter = this)。

しかし、StatisticsForm を StatisticsUserControl に変換し、それを MainForm にドラッグ アンド ドロップすると、Ninject によって MainForm に挿入されるのではなく、単に Designer によって新しく作成されるだけです。ここに 3 つの解決策があります。

1) UserControls を使用せず、これらの複数のビュー (eww) を実装する 1 つの巨大なフォームのみを使用します。

2) UserControls をフォームに挿入すると、デザイナーのサポートが失われます。

3) あなたの解決策! :)

4

3 に答える 3

2

これは確かに研究の興味深い分野です。ユーザー コントロールを一般的な形式でホストするソリューションを作成しました。

私たちの一般的なフォームは、デザイナーでの使用を意図していません。コードを使用して、選択したユーザー コントロールをフォームに動的に追加します。

他のフレームワークについては、Microsoft Patterns & Practices グループのPrism/Compositeを参照してください。これは、WinFormsの拡張機能について説明している記事です。

于 2009-08-15T11:00:59.147 に答える