首先,我已经搜索过,但没有提出解决方案,因为我认为我的问题有点不同。
我有一个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而不是通过依赖注入器解析它。这可能是原因,有没有一种优雅的方法来解决它?