我有一個使用IoC和Unity的MVC應用程序,我使用PerRequestLifetimeManager
定義了一個DbContext
實現。該對象通過工作單元實施注入控制器。使用PerRequestLifetimeManager解析沒有HTTP請求的類型
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請求該對象或我怎樣才能改變我的統一配置,也支持我的遲髮型任務?