0

我对如何使用 Unity 实例化 WPF 应用程序的 MainWindow 以及如何使用 UnityContainer 将依赖项注入我的应用程序的顶层有一个很好的想法。我缺少的是如何在多层设计中使用这种方法。

    protected override void OnStartup(StartupEventArgs e)
    {
        base.OnStartup(e);
        using (IUnityContainer container = new UnityContainer())
        {
            DataSet dataModel = new DataSet();
            dataModel.Tables.Add(new DataTable("User"));
            dataModel.Tables["User"].Rows.Add(dataModel.Tables["User"].NewRow());
            container.RegisterInstance<IDataModel>(dataModel);
            var window = container.Resolve<MainWindow>();
            window.Show();
        }
    }

例如,我有一个“用户”组合框控件,它出现在任意数量的对话框和网格控件中。此“用户”组合框使用“用户集合”视图模型,该模型依赖于公共数据模型(出于所有意图和目的,所有对话框和网格控件都使用共享数据集)。由于主窗口不控制网格控件或 XAML 定义的控件的构造,我如何将我的通用数据模型注入到这个可重用的“用户集合”视图模型中?

4

1 回答 1

1

您应该考虑MVVM 设计模式,并使用 MVVM 框架。在视图模型优先的方法中,您的依赖项将被注入到您的视图模型中,并且您的视图模型将公开视图绑定的属性。

因此,例如,ComboBox要从共享资源中填充您的视图,您可能希望注入某种形式的服务或存储库(或工作单元),以将您的项目检索到视图模型中:

public class MyViewModel(IUserRepository userRepository)
{
    this.userRepository = userRepository;
}

private void PointAtWhichYouWantToPopulateTheCollection()
{
    this.Users = new ObservableCollection(this.userRepository.GetUsers());
}

public ObservableCollection<User> Users
{
    get 
    {
        return this.users;
    }

    set
    {
        this.users = value;
        // notify of property change here
    }
}

在您的视图中,您会将 的 绑定到视图模型上的ItemsSource集合。在您的 IUserRepository 实现中,您将执行数据访问代码。例如可能返回一个.ComboBoxUsersGetUsersIEnumerable<User>

于 2013-08-09T14:27:57.560 回答