是否有可能使用ninject进行依赖注入,结果就像我在MVC中可以得到的注入一样.详细说来,如果我使用MVC ninject适配器,我可以将我的Web控制器声明为具有构造函数参数,然后由ninject自动注入.
但是,我没有为WPF找到这样的ninject扩展,这将使我有一个这样的窗口:
public partial class MainWindow : Window
{
private readonly IService injectedService;
public MainWindow(IService injectedService)
{
this.injectedService = injectedService;
}
}
Run Code Online (Sandbox Code Playgroud)
我想在没有明确使用IKernel
我的主应用程序启动来获取mainwindow的实例的情况下这样做.我更喜欢使用xaml配置的常规方法来获取主窗口和所有后续窗口的实例.
这可能吗?有没有办法挂钩xaml生成的对象创建来修改它以使用Ninject进行构造函数依赖注入.
del*_*ree 17
根据评论和您的困惑,看起来MVVM非常适合您.挑战是,学习MVVM.
因此,打开一个良好的链接,并开始滚动.MVVM非常容易实现,并且很容易用Ninject包装它并对其进行鞠躬.
如果你不像我那样使用Ninject + MVVM的第三方库,那么初始学习曲线有点陡峭.所以这里有一些我必须要了解的事情:
DataContext="{Binding Path=ResultViewModel,Source={StaticResource ServiceLocator}}"
Run Code Online (Sandbox Code Playgroud)
这个小小的附加功能允许您触发ninject从XAML获取您的viewmodel信息:
<Application.Resources>
<ioc:NinjectServiceLocator x:Key="ServiceLocator" />
</Application.Resources>
Run Code Online (Sandbox Code Playgroud)
这个小技巧允许您将app.xaml文件中的staticresource分配给相关的类
public class NinjectServiceLocator
{
private readonly IKernel kernel;
public NinjectServiceLocator()
{
kernel = new StandardKernel(new MyMvvmModule());
}
public ResultViewModel ResultViewModel
{
get { return kernel.Get<ResultViewModel>(); }
}
}
Run Code Online (Sandbox Code Playgroud)
这是值得注意的.必须在ServiceLocator中将每个viewmodel列为属性,以便Ninject生成它们.最后,上面示例中的MyMvvmModule是标准的Ninject类,您可以在其中粘贴Load()并覆盖所有接口.