WPF C#Ninject带有mainViewModel和多个viewmodel问题

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (99)

我在我的应用程序中实现ninject时遇到问题。

我的应用程序包含MainView视图和viewmodel。MainView使用resource.xaml来绘制GUI。我还绑定了MainView.xaml中每个资源的viewmodel。

我在实现Ninject时遇到了问题。

在我正在创建的MainViewModel中;

    public logViewModel ChangelogViewModel { get; set; } = new logViewModel();
    public TabViewModel ToolTabViewModel { get; set; } = new ToolTabViewModel();

我作为资源文件的viewmodel内容发送。如何使用ninject自动创建其他视图模型?

我在使用内核绑定接口方面也遇到了问题。当我的构造函数启动时,我没有从ninject内核绑定中获取函数。

它似乎在运行时检查构造函数时,它只获取我的connectionstring,它是viewmodel中的私有变量。但我的功能不存在。

        Bind<IDataAccessor>().To<DataAccessor>().InSingletonScope().WithConstructorArgument("connectionString", connectionString);

另一个奇怪的事情是,在调用它时,我的访问器似乎并没有运行它的功能。部分类与此有关吗?

我正在使用telerik组件。

提问于
用户回答回答于

像大多数DI容器一样,Ninject使用构造函数注入。您可以告诉它在类/ viewmodel构造函数请求特定接口时要创建的内容。

当您获取该类的实例时,它会提供您注册的参数。

风味的快速而肮脏的例子。

我只是调用启动以显示主窗口,而不仅仅是一个starturl。

    private void Application_Startup(object sender, StartupEventArgs e)
    {
        var nj = new StandardKernel();
        nj.Bind<IVMOne>().To<VMOne>().InTransientScope();

        MainWindow mw = new MainWindow();
        mw.DataContext = nj.Get<MainWindowViewModel>();
        mw.Show();
    }

在这里我说当我要求IVMOne然后给我一个VMONe。MainWindowViewModel想要一个IVMOne用于它的ctor。所以当我获得一个mainwindowviewmodel时,ninject也给了我一个VMOne。

class MainWindowViewModel
{
    public IVMOne VMOne { get; set; }
    public MainWindowViewModel(IVMOne vmOne)
    {
        VMOne = vmOne;
    }
}

我可以绑定到:

    Title="MainWindow" Height="450" Width="800">
<Grid>
    <TextBlock Text="{Binding VMOne.Hello}"/>
</Grid>

扫码关注云+社区

领取腾讯云代金券