hangfire-使用Ioc容器

正如我在上一节中所说,Hangfire在调用实例方法之前使用JobActivator类实例化目标类型。您可以重写它的行为,以对类型实例化执行更复杂的逻辑。例如,您可以告诉它使用项目中使用的IoC容器:

public class ContainerJobActivator : JobActivator
{
    private IContainer _container;

    public ContainerJobActivator(IContainer container)
    {
        _container = container;
    }

    public override object ActivateJob(Type type)
    {
        return _container.Resolve(type);
    }
}

然后,您需要在启动Hangfire服务器之前将其注册为当前作业激活器:

// Somewhere in bootstrap logic, for example in the Global.asax.cs file
var container = new Container();
GlobalConfiguration.Configuration.UseActivator(new ContainerJobActivator(container));
...
app.UseHangfireServer();

为了简化初始安装,NuGet上已经提供了一些集成包。请查看官方网站上的扩展页面以获取所有可用扩展包的列表:
https://www.hangfire.io/extensions.html#ioc-containers
其中一些激活器还提供了GlobalConfiguration类的扩展方法:

GlobalConfiguration.Configuration.UseNinjectActivator(kernel);

HttpContext不可用。在目标类型的实例化期间,请求信息不可用。如果在请求范围(Autofac中的InstancePerHttpRequest、Ninject中的InRequestScope等)中注册依赖项,则在作业激活过程中将引发异常。

因此,整个依赖关系图应该是可用的。在不使用请求作用域的情况下注册其他服务,或者如果IoC容器不支持多个作用域的依赖关系注册,则使用单独的容器实例。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值