【问题标题】:WPF+Unity: UserControl with usage of services?WPF + Unity:使用服务的用户控件?
【发布时间】:2015-09-03 13:18:57
【问题描述】:

我有一个UserControl,基本上是这样的:

你猜对了,目标是让用户在点击Browse时选择一个文件/文件夹,然后在TextBox中显示文件路径。

我开始了我的第一个完整的 MVVM 应用程序(使用 Prism+Unity),实际上我有一个 IDialogService,它允许我显示 MessageBox,但也显示一些 OpenFileDialogSaveFileDialog

我想使用为此IDialogService 提供的实现,以便在执行浏览命令后向用户显示我的对话框。

由于UserControl 不是用Unity 构建的,如何请求实现?

【问题讨论】:

    标签: wpf mvvm user-controls unity-container prism


    【解决方案1】:

    如果我理解正确,您的UserControl 需要以一种或另一种方式获取您正在使用的 Unity 容器。如果您要自己实例化UserControl,可以考虑将其添加为构造函数参数;如果它由框架实例化,您可以考虑使用 Container 属性或 setter 方法。或者您可以将容器作为单例使用。

    无论哪种方式,假设您的 UserControl 具有这样的字段...

    IUnityContainer container;
    

    ...并且您已经设法将其指向您正在使用的容器,您应该能够以正常方式解析您的服务:

    IDialogService service = container.Resolve<IDialogService>();
    service.OpenFileDialog(...);
    

    【讨论】:

    • 好的,很高兴知道我们可以直接通过IUnityContainer 获得服务。你有什么建议来获得它的实例?在某处有类似单身人士的东西?
    • 在我自己的项目中,我使用的是单例,是的。 (这在单元测试领域很麻烦,但你能做什么。)
    • 单例的替代方法是在某些本质上是单例的对象上创建一个属性,例如 App 对象。
    猜你喜欢
    • 2014-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-21
    相关资源
    最近更新 更多