WPF中的Ninject构造函数注入

是否有可能使用ninject进行dependency injection,结果就像我可以在MVC中获得的注入一样。 详细说来,如果我使用MVC ninject适配器,我可以将我的Web控制器声明为具有构造函数参数,然后由ninject自动注入。

但是,我没有为WPF找到这样的ninject扩展,这将使我有一个这样的窗口:

public partial class MainWindow : Window { private readonly IService injectedService; public MainWindow(IService injectedService) { this.injectedService = injectedService; } } 

我想这样做而不在我的主应用程序启动中明确使用IKernel来获取mainwindow的实例。 我更喜欢使用xaml配置的常规方法来获取主窗口和所有后续窗口的实例。

这可能吗? 有没有办法挂钩xaml生成的对象创建来修改它以使用Ninject进行构造函数dependency injection。

根据评论和您的困惑,MVVM看起来很适合您。 挑战是,学习MVVM。

因此,打开一个良好的链接,并开始滚动。 MVVM非常容易实现,并且很容易用Ninject将它包装起来并放在上面。

如果你不像我那样使用Ninject + MVVM的第三方库,那么最初的学习曲线有点陡峭。 所以这里有一些我必须要了解的事情:

  DataContext="{Binding Path=ResultViewModel,Source={StaticResource ServiceLocator}}" 

这个小小的附加function允许您触发ninject从XAML获取您的viewmodel信息:

    

这个小技巧允许您将app.xaml文件中的staticresource分配给相关的类

 public class NinjectServiceLocator { private readonly IKernel kernel; public NinjectServiceLocator() { kernel = new StandardKernel(new MyMvvmModule()); } public ResultViewModel ResultViewModel { get { return kernel.Get(); } } } 

这是值得注意的。 必须在ServiceLocator中将每个viewmodel列为属性,以便Ninject生成它们。 最后,上面示例中的MyMvvmModule是标准的Ninject类,您可以在其中粘贴Load()并覆盖所有接口。