问题描述
嗨,我启动了一个新的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 (将#修改为@)