Как я могу получить новую форму экземпляра, используя Unity Container - PullRequest
0 голосов
/ 21 сентября 2018

Мне нужно получать новый экземпляр из вида, я всегда обрабатываю событие.Как я могу это сделать?

Когда я запускаю событие после закрытия представления, генерируется исключение.

Произошло необработанное исключение типа '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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...