【问题标题】:Autofac MVVM - LifetimeAutofac MVVM - 终身
【发布时间】:2011-06-29 09:30:02
【问题描述】:

有没有在 MVVM 应用程序中使用 Autofac 的示例?我不确定如何在 MVVM 环境中控制对象的生命周期和处置。

我知道我可以创建一个生命周期并从它下面解析,但这看起来更像是服务定位器模式而不是 IoC 模式。

【问题讨论】:

    标签: mvvm dependency-injection ioc-container autofac


    【解决方案1】:

    我没有公开的示例,但我已经在 Silverlight 应用程序中这样做了。

    我使用Silverlight navigation framework 来组织顶级内容。当框架导航到新页面时,我创建了一个生命周期范围,我在其中解析了页面的根视图模型,我通过一个属性与页面相关联:

    [ViewModel(typeof(OrdersViewModel))]
    public class OrdersView : Page
    

    当框架导航到不同的页面时,我在创建下一个之前处置了生命周期范围。

    同样的模式适用于打开对话框。每个对话框都有自己的生命周期范围和视图模型。当它关闭时,生命周期范围被释放。

    还有一些情况并不完全符合这些界限。有时您需要更多粒度,并且可以使用contextual scopes 更深入地了解生命周期范围。这些情况通常是一次性的,并且需要一些胶水来开始生命周期范围。

    我发现从units of work 的角度进行思考很有帮助:您在每个生命周期范围结束时提交更改。这使得一组数据的extent 成为一个自然的生命周期范围。

    【讨论】:

    • code.google.com/p/whitebox 提供的源代码演示了类似的内容 - 使用导航来标记工作单元边界。由于有很多额外的噪音,它可能不是一个非常清楚的例子,但 SessionViewModel 和 ApplicationModule 可能会提供一些线索。
    • Paul Stovell 还发布了一些关于使用 Magellan 实现这一目标的初步细节 - 希望本系列中还有更多内容 :) paulstovell.com/unit-of-work
    • 感谢您提供有用的答案。我将研究其中的一些选项。顺便说一句,Whitebox 看起来很棒,我只是想 IoC 分析器会非常方便......
    猜你喜欢
    • 1970-01-01
    • 2018-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多