我在我的应用程序中实现ninject时遇到了问题。
我的应用程序包含一个MainView视图和一个视图模型。MainView正在使用resource.xaml来绘制图形用户界面。我还为我的MainView.xaml中的每个资源绑定了视图模型。
我在实现Ninject时遇到了一个问题。
在我的MainViewModel中,我正在创建;
public logViewModel ChangelogViewModel { get; set; } = new logViewModel();
public TabViewModel ToolTabViewModel { get; set; } = new ToolTabViewModel();
我将其作为资源文件的视图模型内容发送。如何使用ninject自动创建这些额外的视图模型?
我在使用内核绑定接口时也遇到了问题。当我的构造函数启动时,我没有从对象内核绑定中获得函数。
似乎在运行时,当我检查构造函数时,它只得到我的connectionstring,这是视图模型中的一个私有变量。但是我的函数不在那里。
Bind<IDataAccessor>().To<DataAccessor>().InSingletonScope().WithConstructorArgument("connectionString", connectionString);
另一件奇怪的事情是,当我的存取器被调用时,它看起来并没有运行它的函数。分部类和这个有关系吗?
我正在使用telerik组件。
发布于 2018-12-12 04:12:27
像大多数DI容器一样,Ninject使用构造器注入。当类/视图模型构造函数请求特定接口时,您告诉它要创建什么。
当您获得该类的实例时,它会提供您注册的参数。
这是一个关于味道的又快又脏的例子。
我不只是调用starturl来显示主窗口,而是调用startup来显示主窗口。
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。所以当我得到一个主窗口视图模型时,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>
https://stackoverflow.com/questions/53730356
复制相似问题