我有一个将 IoC 与 Unity 结合使用的 MVC 应用程序,并且我有一个DbContext
使用PerRequestLifetimeManager
. 该对象通过工作单元实现注入控制器。
container.RegisterType<DBContext, MyContext>(new PerRequestLifetimeManager());
到目前为止一切正常,该应用程序具有相当数量的模型和控制器。现在我最近想做的是为这个应用程序添加一些自动化任务,为此我想使用HangFire。
我在我的项目中设置了这个库并创建了一个简单的任务,我想在其中调用一个需要DBContext
.
RecurringJob.AddOrUpdate(() => MyTask(), Cron.Daily);
并MyTask()
定义如下
public void MyTask()
{
var taskManager = container.Resolve<ITaskManager>();
taskManager.DoSomething();
}
任务管理器需要一个 DBContext 实例(通过工作单元对象)
public class TaskManager : ITaskManager
{
public TaskManager(IUnitOfWork uow) {
...
}
}
public class UnitOfWork : IUnitOfWork
{
public class UnitOfWork(DBContext context) {
...
}
}
现在我遇到的问题是,每当任务运行时,我都会收到异常消息PerRequestLifetimeManager can only be used in the context of an HTTP request
。
有没有办法可以在没有 HTTP 请求的情况下注入这个对象,或者如何更改我的 Unity 配置以支持我的 HangFire 任务?