2013-05-01 139 views
13

我的基本设置很像这样; http://visualstudiomagazine.com/articles/2011/10/01/wpf-and-inversion-of-control.aspx带有IoC容器的WPF中的UnitOfWork使用寿命

WPF中的MVVM设置。我正在将一个UnitOfWork和一个RepositoryFactory注入ViewModel。这对我迄今为止编写的对话框非常有用......但是我们的应用程序的大部分内容都是可停靠的窗口(想想Visual Studio UI)。只要申请是开放的,这些都是开放的。

所以我的想法是将单位工作从对话的整个生命期向下移动到方法调用的生命期(例如Button.Click())。

但我还没有想出一个好方法,它不会破坏使用Castle Windsor作为IoC容器和/或不遵循DRY的一些好处。

这似乎很不错... http://www.codeproject.com/Articles/543810/Dependency-Injection-and-Unit-Of-Work-using-Castle但我担心会议被包裹在半单身人士中,并担心我可能会通过删除直接访问UnitOfWork而在自己的脚下射击自己。

任何人都有这个好的解决方案?上面的代码项目是否好,如果不是它的缺点是什么?

+0

你好Fenyx,我倾向于不使用显式使用工作,而是直接使用ISession(NHibernate)或DbContext(EF)。即使它们具有应用程序生命周期,它们的生命周期也会绑定到视图模型。只要这些视图不会从数据库中累积越来越多的数据,我就不会看到问题。请记住,DbContext/ISession与数据库连接不同。 – Marwijn 2013-05-05 19:00:11

+0

没有太多的谈话,看看这个[问题] [1]。 [1]:http://stackoverflow.com/questions/3653009/entity-framework-and-connection-pooling – 2013-05-24 21:37:35

+0

@Sniffer这'[链路字幕](URL)') – 2013-10-02 02:14:39

回答

3

只需介绍工作单元工厂(例如,IUnitOfWorkFactory)接口并在适当的地方使用它(注入等)。

另外,考虑从IDisposable接口继承IUnitOfWork接口。