Unity で IoC を使用する MVC アプリケーションがありDbContext
、PerRequestLifetimeManager
. このオブジェクトは、Unit of Work の実装を通じてコントローラーに挿入されます。
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 のインスタンスが必要です (Unit of Work オブジェクトを介して)
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 タスクもサポートするにはどうすればよいですか?