WPF应用程序中DbContext的寿命

时间:2013-10-02 02:47:09

标签: c# wpf entity-framework dependency-injection ninject

这必须是一个已经解决的问题,我似乎无法找到答案......

我在使用Ninject IoC容器的类库中有一个WPF前端;每个 View 使用 ViewModel 获取 Model 构造函数注入, Model 接收来自{的 Model {1}},也在其构造函数中。

当我输入这些单词时,我发现我可以通过注入一个创建一个派生自DbContext的类的工厂来解决这个问题,但我只是将问题放在上下文中

此设置使每个窗口拥有工作单元 - 这正是我想要的。问题是,在其中一个窗口中,我想要一个 discard changes 命令,从上下文重新加载所有实体。

我读到唯一可靠的方法是DbContext上下文并重新实现它。

  • Q1:这应该如何与依赖注入配合良好?

我可能会有这样的事情:

Dispose

我在想的是这样的事情:

public class SomeModel : ISomeModel
{
    private readonly SomeContext _context;
    public SomeModel(SomeContext context)
    {
        _context = context;
    }

    /* some methods acting upon entities in _context */
}
  • Q2:此方法是否存在任何已知问题/陷阱?

现在我正在使用Ninject的约定扩展来绑定public class SomeModel : ISomeModel { private readonly IContextFactory<SomeContext> _factory; private SomeContext _context; public SomeModel(IContextFactory<SomeContext> factory) { _factory = factory; _context = _factory.Create(); } public void DiscardChanges() { _context.Dispose(); _context = _factory.Create(); } /* some methods acting upon entities in _context */ }

DbContext

如果我采用上述方法,我不再需要这种配置了(除此之外,我不能100%确定上下文在我认为时会被处理掉)并且我可以完全控制上下文的时间线和处理。 ..但我觉得我在打破模式中的某些东西 - 并不是说​​我非常关心打破模式(不是“纯粹主义者”),尽管我很想知道MVVM + DI“纯粹主义者”如何接近这个

另外我知道Ninject有一个 Factory 扩展,它可能不需要工厂类,但是last time I used it, it broke - 类库必须可以被VB6 ActiveX DLL和工厂使用扩展似乎不喜欢那样。

0 个答案:

没有答案