WPF C# Ninject 与 mainViewModel 和多个 viewmodel 问题
Posted
技术标签:
【中文标题】WPF C# Ninject 与 mainViewModel 和多个 viewmodel 问题【英文标题】:WPF C# Ninject with a mainViewModel and multiple viewmodel problem 【发布时间】:2018-12-11 18:35:00 【问题描述】:在我的应用程序中实现 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 组件。
【问题讨论】:
【参考方案1】:与大多数 DI 容器一样,Ninject 使用构造函数注入。 当类/视图模型构造函数请求特定接口时,您告诉它要创建什么。
当您获取该类的实例时,它会提供您注册的参数。
一个快速而肮脏的风味示例。
我调用启动来显示主窗口,而不仅仅是一个 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>
【讨论】:
您好朋友,非常感谢您的回复。我做过和你一样的事情。假设在数据访问项目中,我设法设置 WithConstructorArgument 并将其绑定到数据访问访问器中的构造函数中的字符串变量。 nj.Bind以上是关于WPF C# Ninject 与 mainViewModel 和多个 viewmodel 问题的主要内容,如果未能解决你的问题,请参考以下文章
IAuthenticationFilter 中的 C# Ninject Web API 异步查询导致实体框架中的多个操作错误
带有 DataTemplate 的 ContentControl 不显示任何内容(WPF MVVM)