c# - WPF C# Ninject 与 mainViewModel 和多个 viewmodel 问题
问题描述
我在我的应用程序中实现 ninject 时遇到问题。
我的应用程序包含 MainView 视图和视图模型。MainView 使用 resource.xaml 来绘制 GUI。我还在 MainView.xaml 中为每个资源绑定视图模型。
我在实施 Ninject 时遇到问题。
在我正在创建的 MainViewModel 中;
public logViewModel ChangelogViewModel { get; set; } = new logViewModel();
public TabViewModel ToolTabViewModel { get; set; } = new ToolTabViewModel();
我将其作为资源文件的视图模型内容发送。如何使用 ninject 自动创建这些额外的视图模型?
我也有使用内核绑定接口的问题。当我的构造函数启动时,我没有从 ninject 内核绑定中获取函数。
似乎在运行时检查构造函数时,它只获取我的连接字符串,它是视图模型中的私有变量。但我的功能不在那里。
Bind<IDataAccessor>().To<DataAccessor>().InSingletonScope().WithConstructorArgument("connectionString", connectionString);
另一个奇怪的事情是,当我的访问器被调用时,它似乎并没有运行它的功能。部分课程与此有关吗?
我正在使用 Telerik 组件。
解决方案
像大多数 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>
推荐阅读
- clickhouse - 响应引擎的重复行 - 合并
- java - android 上的 sqlite 中的单引号问题。需要在不替换引号的情况下解决
- qt - 有没有办法在 QML 中设置线性渐变 stepwith
- python - 如何在python中将元素添加到空JSON?
- mysql - 从 ID 中删除第一个字符
- apache - TYPO3 9.5 口语 URL - 如何重写/重定向以前的 RealUrl 页面后缀为 .html
- asp.net - ASP .NET 应用程序中的每个请求是否都部署在 IIS 中,被视为线程还是轻量级进程?
- java - OpenApi 3.0.2 多态性中的鉴别器
- java - 使用流 java 从另一个抽象类中过滤和排序列表
- python - 'str' 对象不支持项目分配:TypeError Traceback