Dependency injection 使用InRequestScope的带Ninject的Hangfire

Dependency injection 使用InRequestScope的带Ninject的Hangfire,dependency-injection,cron,ninject,hangfire,hangfire.ninject,Dependency Injection,Cron,Ninject,Hangfire,Hangfire.ninject,我已将Hangfire.Ninject包安装到ASP MVC 5应用程序中,以便运行一些后台作业 我已经阅读了文档,但对于如何实现它,我感到困惑 我的现有配置将InRequestScope用于我的IUnitOfwork类,以确保每个HTTP请求只实例化一个实例,如下所示: private static void RegisterServices(IKernel kernel) { kernel.Bind<IUnitOfWork>().To<UnitOfWork&

我已将Hangfire.Ninject包安装到ASP MVC 5应用程序中,以便运行一些后台作业

我已经阅读了文档,但对于如何实现它,我感到困惑

我的现有配置将InRequestScope用于我的IUnitOfwork类,以确保每个HTTP请求只实例化一个实例,如下所示:

private static void RegisterServices(IKernel kernel)
{
        kernel.Bind<IUnitOfWork>().To<UnitOfWork>().InRequestScope();
 } 
 public class EmailJob
{
    private readonly IUnitOfWork _unitOfWork;
    private readonly IMailer _mailer;

    public EmailJob(IUnitOfWork unitOfWork, IMailer mailer)
    {
        _unitOfWork = unitOfWork;
        _notificationMailer = notificationMailer;
    }

     public void Execute()
    {
        // DO Stuff
    }

}
我有一个类,我想使用hangfire处理我的后台工作,如下所示:

private static void RegisterServices(IKernel kernel)
{
        kernel.Bind<IUnitOfWork>().To<UnitOfWork>().InRequestScope();
 } 
 public class EmailJob
{
    private readonly IUnitOfWork _unitOfWork;
    private readonly IMailer _mailer;

    public EmailJob(IUnitOfWork unitOfWork, IMailer mailer)
    {
        _unitOfWork = unitOfWork;
        _notificationMailer = notificationMailer;
    }

     public void Execute()
    {
        // DO Stuff
    }

}
有人知道我做错了什么吗?文件还指出:

Services registered with InRequestScope() directive will be unavailable during job activation, you should re-register these services without this hint.

这是什么意思?我仍然希望确保每个http请求只使用一个实现dbContext的IUnitOfwork类。如果我删除InRequestScope,这将如何影响应用程序的其余部分

我认为问题在于你是在约束我的工作本身。 Niject需要一个具体的类来激活UnitOfWork之类的东西

  kernel.Bind<IUnitOfWork>()
        .To<UnitOfWork()
        .InNamedOrBackgroundJobScope(context => context.Kernel.Components.GetAll<INinjectHttpApplicationPlugin>()
        .Select(c => c.GetRequestScope(context))
        .FirstOrDefault(s => s != null));
kernel.Bind()
.To context.Kernel.Components.GetAll()的
.Select(c=>c.GetRequestScope(上下文))
.FirstOrDefault(s=>s!=null);