依赖于WPF用户控制的依赖注入(Windsor)
在MainView中使用DI不是问题:依赖于WPF用户控制的依赖注入(Windsor),wpf,dependency-injection,castle-windsor,Wpf,Dependency Injection,Castle Windsor,在MainView中使用DI不是问题: 我将我的窗口添加到我的容器中,并在启动时显示已从容器中拉出的窗口。但是,如果我将usercontrol作为xaml标记添加到主视图中,wpf视图引擎将自动为其创建新实例,而无需拉出我添加到容器中的usercontrol。。如何强制WPF视图引擎在容器中搜索view/xamal所需的组件,而不是创建新的组件 如果不修改您的XAML,就没有办法做到这一点。您可以考虑一些解决方法,例如创建一个继承自ContentControl的控件,该控件将把依赖项注入其内容,
我将我的窗口添加到我的容器中,并在启动时显示已从容器中拉出的窗口。但是,如果我将usercontrol作为xaml标记添加到主视图中,wpf视图引擎将自动为其创建新实例,而无需拉出我添加到容器中的usercontrol。。如何强制WPF视图引擎在容器中搜索view/xamal所需的组件,而不是创建新的组件 如果不修改您的XAML,就没有办法做到这一点。您可以考虑一些解决方法,例如创建一个继承自
ContentControl
的控件,该控件将把依赖项注入其内容
,但我不推荐这种方法,除非您别无选择
我建议使用最好的WPF模式--MVVM。其思想是拥有一个ViewModels的层次结构,所有这些模型都将使用IoC容器和适当的构造函数注入来创建。此外,您将拥有视图的层次结构,每个视图将仅依赖于相应的viewModel,该viewModel将被传递到视图的
DataContext
。这种方法将允许您在WPF应用程序中很好地使用DI。我想我理解了您的建议
<Window x:Class="DDDSample02.Wpf.Views.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:presentation="clr-namespace:DDDSample02.Wpf.Views"
Title="MainWindow" Height="384" Width="821">
<Grid>
<presentation:ProductsView DataContext="{Binding Path=ProductsPresenter}" />
</Grid>
</Window>
主窗口看起来像
public partial class MainWindow : Window
{
public MainWindow(DDDSample02.ViewModel.MainWindowPresenter presenter)
{
InitializeComponent();
this.DataContext = presenter;
}
}
public class MainWindowPresenter
{
public MainWindowPresenter(ProductsPresenter productPresenter)
{
this.ProductsPresenter = productPresenter;
}
public ProductsPresenter ProductsPresenter { get; private set; }
}
重复:
public partial class MainWindow : Window
{
public MainWindow(DDDSample02.ViewModel.MainWindowPresenter presenter)
{
InitializeComponent();
this.DataContext = presenter;
}
}
public class MainWindowPresenter
{
public MainWindowPresenter(ProductsPresenter productPresenter)
{
this.ProductsPresenter = productPresenter;
}
public ProductsPresenter ProductsPresenter { get; private set; }
}