我在应用程序中实现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组件。
答案 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>