DbContext无法使用,因为它正在处理中

时间:2014-06-26 14:13:10

标签: c# asp.net-mvc dependency-injection unity-container

首先,我已经搜索过,但没有提出解决方案,因为我认为我的问题有点不同。

我有一个UnitOfWork,我正在使用Unity Dependency Injection来解析容器的实例。

我有一个实现IUnitOfWork的UnitOfWork。 UnitOfWork有3个不同的构造函数:

public UnitOfWork()
    : this(new UnitOfSettings(HttpContext.Current.Request.Url.Host))
{
}

public UnitOfWork(DbContext settingsEntities)
    : this(new UnitOfSettings(settingsEntities, HttpContext.Current.Request.Url.Host))
{
}

public UnitOfWork(UnitOfSettings unitOfSettings)
{
    // Logic left out to made it clear.
}

此外,这个类有很多存储库对象。这些没有列在这里,因为我认为它们不会增加任何价值。

所以,现在我有Unity注册接口:

public static void RegisterTypes(IUnityContainer container)
{
    container.RegisterType<IUnitOfWork, UnitOfWork>(new PerRequestLifetimeManager(), new InjectionConstructor(new SettingsEntities()));
}

由于我使用新的SettingsEntities解析了IUnitOfWork,我还在容器中注册了SettingsEntities。 SettingsEntities是DbContext(实体框架 - 模型优先)。

但是,当我通过工作单元访问存储库时,我仍然收到错误消息:

“由于已经处理了DbContext,因此无法完成操作。”

由于我使用的是PerRequestLifetimeManager,我不知道这里发生了什么。

错误发生在UnitOfWork的构造函数链中。 可能是因为我构造函数是一个新的UnitOfSettings而不是通过依赖注入器解析它。这可能是原因,有没有一种优雅的方法来解决它?

0 个答案:

没有答案