Мне нужно получать новый экземпляр из вида, я всегда обрабатываю событие.Как я могу это сделать?
Когда я запускаю событие после закрытия представления, генерируется исключение.
Произошло необработанное исключение типа 'System.ObjectDisposedException' в System.Windows.Forms.dll Дополнительная информация: Не удается получить доступ к удаленному объекту.произошло
<package id="Unity" version="5.8.11" targetFramework="net471" />
static class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
using (var container = UnityConfig.BuildUnityContainer())
{
var presenter = container.Resolve<IForm1Presenter>();
Application.Run((Form)presenter.View);
}
}
}
public static class UnityConfig
{
public static IUnityContainer BuildUnityContainer()
{
var container = new UnityContainer();
container
.RegisterType<IForm1, Form1>(new PerResolveLifetimeManager())
.RegisterType<IForm2, Form2>(new PerResolveLifetimeManager())
.RegisterType<IForm1Presenter, Form1Presenter>(new TransientLifetimeManager())
.RegisterType<IForm2Presenter, Form2Presenter>(new TransientLifetimeManager());
return container;
}
}
public interface IForm1
{
void Show();
event EventHandler ButtonClick;
}
public interface IForm1Presenter
{
IForm1 View { get; }
}
public class Form1Presenter : IForm1Presenter
{
public Form1Presenter(IForm1 view, IForm2Presenter form2Presenter)
{
view.ButtonClick += (s, e) => form2Presenter.ShowView();
View = view;
}
public IForm1 View { get; }
}
public IForm1 View { get; }
}
public interface IForm2
{
void Show();
}
public interface IForm2Presenter
{
void ShowView();
}
public class Form2Presenter : IForm2Presenter
{
private readonly IForm2 _view;
public Form2Presenter(IForm2 view) => _view = view;
public void ShowView() => _view.Show();
}