xer*_*him 6 c# wpf dependency-injection ninject caliburn.micro
我正在尝试使用Caliburn Micro和Ninject框架在新的WPF项目中设置依赖注入.不幸的是我没有成功:(互联网上有一些例子实现了一个通用的Bootstrap,但对我来说,通用的Bootstrap类是不可用的,因为所有这些例子都至少3年了,我猜它们已经被弃用了......
我试过的是以下内容:
public class CbmBootstrapper : BootstrapperBase
{
private IKernel kernel;
protected override void Configure()
{
this.kernel = new StandardKernel();
this.kernel.Bind<IAppViewModel>().To<AppViewModel>();
}
}
Run Code Online (Sandbox Code Playgroud)
并在App.xaml中
<Application x:Class="CBMExample.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:local="clr-namespace:CBMExample"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary>
<local:CbmBootstrapper x:Key="bootstrapper" />
</ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
Run Code Online (Sandbox Code Playgroud)
我是WPF和Ninject的新手.你能告诉我我要改变什么,以便在应用程序启动时,带有相应ViewModel(AppViewModel)的View(AppView)被加载吗?
您是否知道有关使用和设置Ninject与Caliburn Micro的最新教程?
您还需要覆盖OnStartup才能显示根视图/视图模型:
protected override void OnStartup(object sender, System.Windows.StartupEventArgs e)
{
DisplayRootViewFor<IAppViewModel>();
}
Run Code Online (Sandbox Code Playgroud)
这个额外的调用取代了之前的通用引导程序,并允许您在运行时为应用程序选择根视图。
您还需要重写GetInstance才能让 Caliburn 连接到 Ninject:
protected override object GetInstance(Type serviceType, string key)
{
return container.Get(serviceType);
}
Run Code Online (Sandbox Code Playgroud)
当 Caliburn.Micro 需要构建某些东西时,它就会调用它,因此它是您将 Ninject(其他 IoC 容器可用!)注入到进程中的一站式商店。
至于最新的教程;自从 Caliburn.Micro 进入版本 2 以来,已经没有那么多了,但是他们的官方文档通常非常有用。
编辑:你还必须做一件事!确保您的引导程序构造函数调用Initialize:
public CbmBootstrapper ()
{
Initialize();
}
Run Code Online (Sandbox Code Playgroud)
这将使 Caliburn.Micro 开始行动......
| 归档时间: |
|
| 查看次数: |
1303 次 |
| 最近记录: |