我正在尝试建立一个WPF应用程序,以在菜单单击上调用新窗口,并将数据提供程序界面注入到新的视图模型中。
遵循了许多教程,并为Caliburn创建了Bootstrapper,它是ninject的服务定位器和模块。到目前为止,主视图不需要IDataProvider,但我想在click事件上打开一个新窗口。
引导程序:
public class Bootstrapper : BootstrapperBase
{
public Bootstrapper()
{
Initialize();
}
protected override void OnStartup(object sender, StartupEventArgs e)
{
DisplayRootViewFor<MainScreenViewModel>();
}
}
服务定位器和模块:
public class ServiceLocator
{
private readonly IKernel _kernel;
public ServiceLocator()
{
_kernel = new StandardKernel(new ServiceModule());
}
public MainScreenViewModel MainScreenViewModel => _kernel.Get<MainScreenViewModel>();
public NewLayoutViewModel NewLayoutViewModel => _kernel.Get<NewLayoutViewModel>();
}
public class ServiceModule : NinjectModule
{
public override void Load()
{
Bind<ISqlite>().To<Sqlite>();
Bind<IDataProvider>().To<DataProvider>();
}
}
这就是我被困住的地方:
public class MainScreenViewModel : Conductor<object>
{
private IWindowManager _windowManager;
public MainScreenViewModel()
{
_windowManager = new WindowManager();
}
public void NewLayout()
{
_windowManager.ShowWindow(new NewLayoutViewModel());
}
}
因为NewLayoutViewModel需要IDataProvider。
不确定,我还缺少什么,但是据我了解,Ninject应该为NewLayoutViewModel处理这个问题。
答案 0 :(得分:0)
在YouTube上从Tim Corey找到了一个很好的解决方案。
基本上,答案是,如果您不坚持使用Ninjet,请使用Caliburn.Micro的内置DI解决方案“ SimpleContainer”。