WPF C#Ninject与mainViewModel和多视图模型问题

时间:2018-12-11 18:35:00

标签: c# wpf

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

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

我在实现Ninject时遇到问题。

我正在创建的MainViewModel;

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

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

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

在运行时,当我检查构造函数时,它只会得到我的连接字符串,它是viewmodel中的一个私有变量。但是我没有任何功能。

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

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

我正在使用telerik组件。

1 个答案:

答案 0 :(得分:0)

与大多数DI容器一样,Ninject与构造函数注入一起工作。 您可以告诉它在类/视图模型构造函数要求特定接口时要创建的内容。

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

一个简单又肮脏的风味例子。

我不仅仅是启动URL,而是调用启动来显示主窗口。

    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作为它的控制器。 因此,当我获得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>