SIMPLEINJECTOR&WPF主窗口,它在启动时在验证容器后创建了两次

问题描述

嗨,我启动了一个新的WPF应用,我想使用simpleInjector作为我的IOC容器。

我现在至少不想使用任何MVVM框架,但我尝试自己实现所有功能我有一个小问题(也许是WPF没有正确配置,或者我注册的类型不正确)。 当我启动我的应用程序时,容器会在引导过程中,调用GetInstance方法之前创建一个新的MainWindow

这是我的代码


public partial class App : Application
{
    private Container _container;

    protected override void OnStartup(StartupEventArgs e)
    {
        _container = Bootstrap();
        RunApplication(_container);
    }

    private Container Bootstrap()
    {
        // Create the container as usual.
        var container = new Container();

        // Register your types:


        // Register your windows and view models:

        container.Register<viewmodelFactory>(Lifestyle.Singleton);
        container.Register<INavigator,Navigator>(Lifestyle.Singleton);
        container.Register<MainWindowviewmodel>();
        container.Register<MainWindow>();

        container.Verify();

        return container;
    }

    private void RunApplication(Container container)
    {
        try
        {
            var mainWindow = container.GetInstance<MainWindow>();
            Run(mainWindow);
        }
        catch (Exception e)
        {
            //Log the exception and exit
        }
    }
}

//viewmodelFactory
public class viewmodelFactory
{
    public viewmodelBase Createviewmodel(ViewType viewType)
    {
        switch (viewType)
        {
            case ViewType.Production:
                return new Productionviewmodel();
            case ViewType.Anagraphic:
                return new Anagraphicviewmodel();
            default:
                throw new ArgumentException("The ViewType does not have a viewmodel.","viewType");
        }
    }
}

public class Navigator : INavigator,INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    private readonly viewmodelFactory _factory;
    private viewmodelBase _currentviewmodel;

    public Navigator(viewmodelFactory factory)
    {
        _factory = factory;
    }

    public viewmodelBase Currentviewmodel
    {
        get
        {
            return _currentviewmodel;
        }

        set
        {
            _currentviewmodel = value;
            OnPropertyChanged();
        }
    }

    public ICommand UpdateCurrentviewmodelCommand => new UpdateCurrentviewmodelCommand(this,_factory);



    [NotifyPropertyChangedInvocator]
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this,new PropertyChangedEventArgs(propertyName));
    }
}

public class MainWindowviewmodel : viewmodelBase
{
    private readonly INavigator _navigator;

    public MainWindowviewmodel(INavigator navigator)
    {
        _navigator = navigator;
    }

    public INavigator Navigator => _navigator;


}

public partial class MainWindow : Window
{
    public MainWindow(MainWindowviewmodel viewmodel)
    {
        InitializeComponent();
        DataContext = viewmodel;
    }
}

发生什么情况是,当我致电验证一个完整的图形时,它是否已解决....有一种方法可以在不创建所有图形实例的情况下检查注册? 你有什么主意吗? 注册有问题吗?

预先感谢

ps。这是我与ioc合作的第一个项目,我想用它们来了解如何以这种方式进行开发

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...