【发布时间】:2018-07-13 07:32:25
【问题描述】:
我正在尝试启动一个简单的 Model View Presenter WinForms 应用程序并使用构造函数注入将 IMainView、IEventPublisher 和 IRepository 注入到主演示者。
但是,我在找出如何准确执行此操作时遇到了一些问题。我的问题是,由于某种原因,演示者似乎创建了视图的两个实例,或者视图已创建但未显示。
Program.cs
var kernel = new StandardKernel();
kernel.Load(Assembly.GetExecutingAssembly());
//var view = kernel.Get<View.MainForm>();
var presenter = kernel.Get<Presenter>();
//Application.Run(view);
Application.Run();
如果在 program.cs 上初始化了视图,那么演示者也会创建自己的视图吗?使用上面的主动方法,视图被创建但不显示。
Presenter.cs
public Presenter(IMainForm view,
IRepository repository,
IEventPublisher eventPublisher)
{
_view = view;
_repository = repository;
_reactiveEventPublisher = eventPublisher;
}
MainForm.cs
public Form(IEventPublisher eventPublisher)
{
_reactiveEventPublisher = eventPublisher;
}
NinjectBindings.cs
public class NinjectBindings : NinjectModule
{
public override void Load()
{
Bind<IRepository>().To<Repository>();
Bind<IMainForm>().To<View.MainForm>();
Bind<IEventPublisher>().To<ReactiveEventAggregator>().InSingletonScope();
Bind<Presenter>().ToSelf();
}
}
问题是,如果视图被注入到演示者,启动 WinForms 应用程序的正确方法是什么?
使用 Ninject 3.3.4 作为 IoC 容器。
【问题讨论】: