在没有IOC的情况下在wcf服务中管理DbContext范围?

时间:2014-02-21 06:29:02

标签: c# wcf entity-framework dbcontext

我们正在为使用EF6 ORM的项目之一实施ntier架构。 DbContext 范围由 ContextStoreFactory 管理。基于配置ContextStoreFactory使用 HttpContextStore / StaticContextStore 来创建DbContext。对于控制台应用程序其工作正常现在我们计划使用net.msmq绑定实现 wcf服务,该服务使用底层服务来处理传入请求。

public class TestService : ITestService
{
  public void ProcessPerson(Person person)
  {
     var repo = GetRepository();
     var personService = new PersonService(repo);
     personService.Process(person);
  }

  private IRepository GetRepository()
  {
    var context = ContextStoreFactory.GetContextStore().GetContext();//Calls OperationcontextStore
    return new Repository(context);
  }
}

我想在wcf服务中管理DbContext范围。我遇到过许多文章,说最好使用DBContext 每次通话/操作。我的示例OperationContextStore如下所示。如果需要更正,请随时更正。

 public class OperationContextStore
 {
    public static readonly string ITEM_NAME = "DBCONTEXT-INSTANCES";

    public DBContext GetContext()
    {
      if(!OperationContext.Current.OutgoingMessageProperties.ContainsKey(ITEM_NAME))
          OperationContext.Current.OutgoingMessageProperties.Add(ITEM_NAME, new  DBContext());
      return (DBContext)OperationContext.Current.OutgoingMessageProperties[ITEM_NAME]; 
    }

    public void Dispose()
    {}
 }
  1. 我想知道每个调用的DbContext范围在我的场景中是否有效?
  2. 在我的服务方法中创建存储库的方法是否有效?
  3. 是否有任何最佳做法可以在不使用IOC的情况下进行连接?

1 个答案:

答案 0 :(得分:0)

我知道现在回答我自己的问题已经很晚了,我将会回忆起我的所作所为

  1. 我想知道每个调用的DbContext范围在我的方案中是否有效?

    是的,它在我的方案中有效。

  2. 在我的服务方法中创建存储库的方法是否有效?

    我最终将IRepository作为我服务类中的属性并进行了属性注入。

  3. 有没有最佳做法可以在不使用IOC的情况下进行连接?

    我最终编写了自己的实用程序。请搜索穷人的依赖注射。