在WPF中使用Unity

我让Unity 2.0在App.xaml.cs中运行良好,可以在该类中注册和解析。

我的问题是关于最佳做法。

我有许多用户控件和其他类,还需要解决一些相同和新的接口实现。 问题是无法访问我在App.xaml.cs中创建的Unity容器。

我不能使用构造函数或属性注入来传递容器引用。

  1. 太多了(这是一个大项目)
  2. 用户控件通过xaml添加
  3. 项目中有几个非常松散相关的“模块”可以共享相同的容器配置。

我宁愿不在每个需要访问容器的对象的配置文件中重新创建容器。

在同一组件的各种“模块”中需要同一个容器作为服务时,是否有任何最佳实践建议?

谢谢。

我认为将ControlsIoC结合在一起至少是代码中的痛苦。 可能有人会争辩,但IMO避免这种痛苦的最佳做法是MVVM 。 您将拥有viewModel,您可以使用Unity自由构建并将所需内容注入其中。 您将拥有与viewModel绑定的视图,而没有理由知道任何大量的控制反转。

更新 :根据评论:

App.xaml.cs:

  private void HandleStartup(object sender, StartupEventArgs e) { var container = CreateContainer(); // create IoC container var mainViewModel = container.Resolve(); var shell = new Shell { DataContext = mainViewModel }; // main View MainWindow = shell; shell.Show(); } 

Shell XAML示例:

        

MainViewModel:

 public class MainViewModel { public ViewModel1 ViewModel1 { get; private set; } public ViewModel2 ViewModel2 { get; private set; } public ViewModel3 ViewModel3 { get; private set; } // this will be handled by IoC container public MainViewModel(ViewModel1 viewModel1, ViewModel2 viewModel2, ViewModel3 viewModel3) { ViewModel1 = viewModel1; ViewModel2 = viewModel2; ViewModel3 = viewModel3; } 

通过这种方式,您的视图将不会意识到IoC,并且将成功注入viewModel中您想要的所有内容。

UPDATE2 DataTemplating将ViewsViewModels结合在一起:

App.xaml中