xof*_*ofz 6 c# user-controls dependency-injection ninject windows-forms-designer
public class StatisticsViewPresenter
{
private IStatisticsView view;
private Statistics statsModel;
public StatisticsViewPresenter(IStatisticsView view, Statistics statsModel)
{
this.view = view;
this.statsModel = statsModel;
}
}
Run Code Online (Sandbox Code Playgroud)
我不使用事件(但我愿意,如果它可以解决我的问题),所以我的View类看起来像这样:
public class StatisticsForm : Form, IStatisticsView
{
public StatisticsForm()
{
InitializeComponent();
}
[Inject]
public StatisticsViewPresenter Presenter
{
private get;
set;
}
}
Run Code Online (Sandbox Code Playgroud)
同
kernel.Bind<StatisticsPresenter>().ToSelf().InSingletonScope();
kernel.Bind<IStatisticsView>().To<StatisticsForm>();
kernel.Get<IStatisticsView>();
Run Code Online (Sandbox Code Playgroud)
它构建表单,构建演示者,然后将演示者注入Presenter属性.一切都很好看.(除了那个单例范围的演示者 - 有关更好的方法的任何想法吗?也许只是手动将演示者注入到演示者的构造函数中的视图的Presenter属性中:this.view.Presenter = this).
但是如果我将StatisticsForm转换为StatisticsUserControl并将其拖放到我的MainForm上,它就不会被Ninject注入到MainForm中,它只是由Designer新设计的.我在这看到三个解决方案:
1)不要使用UserControls,只使用一个实现这些多视图的巨型表单(eww);
2)将UserControls注入我的表单并失去Designer支持;
3)你的解决方案!:)
我应该说,这无疑是一个有趣的研究领域。我们为自己制定了一个解决方案,以通用形式托管用户控件。
我们的通用表单不适用于设计器。通过代码,我们将所选的用户控件动态添加到表单中。
对于其他框架,您应该查看Microsoft 模式与实践组中的Prism/Composite 。这是一篇讨论 WinForms 扩展的文章。
归档时间: |
|
查看次数: |
1913 次 |
最近记录: |