5

Unity で IoC を使用する MVC アプリケーションがありDbContextPerRequestLifetimeManager. このオブジェクトは、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 タスクもサポートするにはどうすればよいですか?

4

1 に答える 1