c# - Unity IOC 与 winforms MVP 多个实例
问题描述
我想要做的是在主窗体内多次启动一个窗体,我在视图和演示者之间有 1 对 1 的关系。因此,当 presnter 或 view 被处理时,它们都会从内存中释放
我只是不知道如何实现这一点。
我能够成功启动标签表单一次,但是在我的按钮上单击我想启动更多标签表单。
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
var unityContainer = new UnityContainer();
unityContainer.RegisterType<IMainViewUC, MainViewUC>(new ContainerControlledLifetimeManager());
unityContainer.RegisterType<IMainPresenter, MainPresenter>(new ContainerControlledLifetimeManager());
unityContainer.RegisterType<ITagsPresenter, TagsPresenter>(new PerResolveLifetimeManager());
unityContainer.RegisterType<ITagsViewUC, TagsViewUC>(new PerResolveLifetimeManager());
IMainPresenter mainPresenter = unityContainer.Resolve<MainPresenter>();
IMainViewUC mainView = mainPresenter.GetView();
Application.Run((MainViewUC)mainView);
}
public class MainPresenter :IMainPresenter
{
private IMainViewUC _view = null;
private ITagsPresenter _tagsPresenter = null;
public MainPresenter(IMainViewUC view, ITagsPresenter tagsPresenter)
{
_view = view;
_tagsPresenter = tagsPresenter;
_view.TagsViewEventRaised = ((IMainPresenter)this).OnTagsView;
}
void IMainPresenter.OnTagsView()
{
var view = _tagsPresenter.GetView();
_view.AddMdiChildView(view);
}
void IMainPresenter.AddChildView(IView view)
{
_view.AddMdiChildView(view);
}
IMainViewUC IMainPresenter.GetView()
{
return _view;
}
}
public partial class MainViewUC : Form, IMainViewUC
{
Action IMainViewUC.TagsViewEventRaised { get; set; }
public MainViewUC()
{
InitializeComponent();
}
void IMainViewUC.AddMdiChildView(IView view)
{
var form = (Form)view;
form.MdiParent = this;
form.Show();
}
private void toolStripMenuItem_tags_Click(object sender, EventArgs e)
{
((IMainViewUC)this).TagsViewEventRaised();
}
}
解决方案
推荐阅读
- c - 扫描带有空格的字符串
- java - 需要长期访问令牌来管理 Daily Motion API 上的视频
- javascript - foreach 循环追加一个循环并暂停事件 javascript
- objective-c - 在 iOS 静态库中使用 socket.io-client-cpp 发生错误
- swift - 斯威夫特:设置@IBOutlet 静态
- php - 无法通过codeigniter中的数组更新数据
- javascript - Hyperledger Composer 在客户端创建卡片数据以发送导入请求
- r - 默认情况下,tapply 会排除传递给分段的变量的 NA 吗?
- python - 不使用 AJAX 和 jQuery 的 Django 多文件上传
- java - NoHostAvailableException :: Java 到 Cassandra SSL 集群的连接失败