我最近了解了Hangfire,但到目前为止还没有任何收获。我的项目使用autofac,所以我在项目中添加了HangFire.1.4.3 &HangFire.Autofac.1.1.0Nuget包。接下来是文档,我在那里创建了Startup类并注册了Hangfire
public void Configuration(IAppBuilder app)
{
GlobalConfiguration.Configuration
.UseSqlServerStorage("NavigatorConnectionString");
app.UseHangfireDashboard();
app.UseHangfireServer();
}在那之后,我已经更新了WebApiConfig并在Hangfire中注册了我的Autofac容器
private static void RegisterDependencies(HttpConfiguration config)
{
var builder = new ContainerBuilder();
...
var container = builder.Build();
...
config.DependencyResolver = new AutofacWebApiDependencyResolver(container);
Hangfire.GlobalConfiguration.Configuration.UseAutofacActivator(container);
}当我尝试像这样运行Hangfire作业时
IObject someObject = MyObject();
var jobId = BackgroundJob.Enqueue<IMyInterface>(x
=> x.MyMethod(someObject));我得到以下错误
System.InvalidOperationException类型MyNamespace.IMyInterface在Hangfire.Storage.InvocationData.Deserialize()不包含带有签名MyMethod(IObject1)`的方法会有什么问题?
发布于 2015-07-09 16:23:14
这个问题是在工作中遇到的问题。它序列化参数,如果是泛型,就不能将其序列化。解决方法是创建一个可以轻松序列化/期望序列化的中介器,并运行所需的代码。
发布于 2019-09-17 00:19:41
您需要在Startup.cs文件中添加以下代码。
private void ConfigureAutofac(HttpConfiguration config, IAppBuilder app)
{
var requestTag = MatchingScopeLifetimeTags.RequestLifetimeScopeTag;
var jobTag = AutofacJobActivator.LifetimeScopeTag;
builder.RegisterType<MyClass>().As<IMyInterface>().InstancePerRequest();
}https://stackoverflow.com/questions/31285996
复制相似问题