C# Unity IOC与winforms MVP多实例
我要做的是在主窗体内多次启动窗体 我在视图和演示者之间有1对1的关系。 因此,当预中心或视图被释放时,它们都将从内存中释放 我只是不知道如何做到这一点 我可以成功启动标签表单一次,但在我的按钮上单击我想启动更多标签表单C# Unity IOC与winforms MVP多实例,c#,dependency-injection,inversion-of-control,unity-container,C#,Dependency Injection,Inversion Of Control,Unity Container,我要做的是在主窗体内多次启动窗体 我在视图和演示者之间有1对1的关系。 因此,当预中心或视图被释放时,它们都将从内存中释放 我只是不知道如何做到这一点 我可以成功启动标签表单一次,但在我的按钮上单击我想启动更多标签表单 [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(
[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();
}
}
[STAThread]
静态void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
var unityContainer=新的unityContainer();
RegisterType(新的ContainerControlled LifetimeManager());
RegisterType(新的ContainerControlled LifetimeManager());
RegisterType(新的PerResolveLifetimeManager());
RegisterType(新的PerResolveLifetimeManager());
IMainPresenter mainPresenter=unityContainer.Resolve();
IMainViewUC mainView=mainPresenter.GetView();
Application.Run((MainViewUC)mainView);
}
公共类主演示者:IMainPresenter
{
私有IMainViewUC\u视图=null;
私有ITagsPresenter _tagsPresenter=null;
公共主演示者(IMainViewUC视图,ITAGPresenter标记ReseCenter)
{
_视图=视图;
_tagsPresenter=tagsPresenter;
_view.TagsViewEventRaised=((IMainPresenter)this).OnTagsView;
}
void IMainPresenter.OnTagsView()
{
变量视图=_tagsPresenter.GetView();
_视图。添加MDIChildView(视图);
}
void IMainPresenter.AddChildView(IView视图)
{
_视图。添加MDIChildView(视图);
}
IMainViewUC IMainPresenter.GetView()
{
返回视图;
}
}
公共部分类MainViewUC:Form,IMainViewUC
{
动作IMainViewUC.TagsViewEventRaised{get;set;}
公共MainViewUC()
{
初始化组件();
}
void IMainViewUC.AddMdiChildView(IView视图)
{
var form=(form)视图;
form.MdiParent=此;
form.Show();
}
私有无效工具StripMenuItem\u标记\u单击(对象发送方,事件参数e)
{
((IMainViewUC)this).TagsViewEventRaised();
}
}
我认为unity3d标签在这里不适用,你是说unity(框架,unity3d是游戏引擎)谢谢,我加入了unity,它会自动解析到unity3d