0

我正在使用Code-FirstEntity Framework 5Repository Pattern

我需要从一些扩展方法中获取上下文,以访问无法通过属性访问的其他实体。

例子:

public static class MyClassExtensions
{
    public static void DoSomething(this MyClass mClass)
    {
        // This is what I want to do
        // GetContextSomeWay() is what I need
        // GetRepository is method from my context
        mClass.GetContextSomeWay().GetRepository<SomeRepository>().Where(...);
    }
}

public class MyService
{
    public void DoSomethingOnService(int id)
    {
        MyContext ctx = new MyContext();
        MyClass cl = ctx.GetRepository<MyClass>().Single(c => c.Id == id);
        cl.DoSomething();
    }
}

我想了两个解决方案。

  1. 将上下文作为参数传递给扩展方法
  2. ObjectMaterialized使用事件为每个实体设置上下文

尽管第一种方法很容易工作,但我不能停止认为这不是一个好的做法。

对于第二个,除了为我的每个类添加一个新属性之外,我想知道这是否会成为性能问题。这是过度关注,还是有效?

这个问题还有其他解决方案吗?

4

1 回答 1

1

添加 Unity 并将您的存储库放置在那里可能是一个解决方案。你只有一个容器,里面存放着你需要的东西,充其量是在组合根。

然后,您可以通过 Unity 容器访问它们。

这是一个很好的教程,展示了所需的技术: Jason Dollinger on MVVM。它主要是关于 MVVM,但也显示了 unity 的用法。

源代码可在此处获得: MVVM Demo 客户端源代码

以下是有关这些的更多信息:

统一

组合根

于 2013-01-31T17:18:25.533 回答