C# 无法使用DbContext,因为它是';正在处理
首先,我已经搜索过了,但没有找到解决方案,因为我认为我的问题有点不同 我有一个UnitOfWork,我正在使用Unity依赖项注入来解析容器的实例 我有一个UnitOfWork,它实现了一个IUnitOfWork。 此UnitOfWork有3个不同的构造函数:C# 无法使用DbContext,因为它是';正在处理,c#,asp.net-mvc,dependency-injection,unity-container,C#,Asp.net Mvc,Dependency Injection,Unity Container,首先,我已经搜索过了,但没有找到解决方案,因为我认为我的问题有点不同 我有一个UnitOfWork,我正在使用Unity依赖项注入来解析容器的实例 我有一个UnitOfWork,它实现了一个IUnitOfWork。 此UnitOfWork有3个不同的构造函数: public UnitOfWork() : this(new UnitOfSettings(HttpContext.Current.Request.Url.Host)) { } public UnitOfWork(DbConte
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()));
}
公共静态无效注册表类型(IUnityContainer容器)
{
RegisterType(新PerRequestLifetimeManager(),新InjectionConstructor(新SettingSenties());
}
因为我用一个新的SettingSenties来解析我的IUnitOfWork,所以我也在容器中注册了SettingSenties。SettingSenties是一个DbContext(实体框架-模型优先)
但是,当我通过工作单元访问存储库时,仍然会收到错误消息:
“无法完成该操作,因为DbContext已被释放。”
我不知道这里发生了什么,因为我正在使用PerRequestLifetimeManager
错误发生在UnitOfWork的构造函数链接中。
可能是因为我正在构造一个新的UnitOfSettings,而不是通过依赖项注入器来解析它。这可能是原因吗?有没有一种优雅的方法来解决这个问题?发布控制器代码。我更新了这个问题,因为失败的不是控制器操作,而是构造函数链接。@Complexity当你出现错误时调用了哪个特定的构造函数?
DbContext-settingsenties
在哪里实例化?我将回顾一下。这样做是因为必须通过Unity容器创建上下文。这是一个正确的假设吗?@ComplexityDbContext
不需要由容器创建,但是我想知道在DbContext
上还可以调用什么Dispose()
。