我最近了解了Hangfire,但到目前为止还没有运气。我的项目使用autofac,所以我添加了HangFire.1.4.3& HangFire.Autofac.1.1.0 nuget包到我的项目。接下来是文档我创建了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类型不包含带签名MyMethod(IObject1)`的方法 在Hangfire.Storage.InvocationData.Deserialize() 可能是什么问题?
答案 0 :(得分:0)
问题在于篝火的工作方式。它序列化参数,如果泛型不能反复使用它。解决方法是创建一个可以轻松序列化/绝望化并运行所需代码的中介。
答案 1 :(得分:0)
您需要在Startup.cs文件中添加以下代码。
private void ConfigureAutofac(HttpConfiguration config, IAppBuilder app)
{
var requestTag = MatchingScopeLifetimeTags.RequestLifetimeScopeTag;
var jobTag = AutofacJobActivator.LifetimeScopeTag;
builder.RegisterType<MyClass>().As<IMyInterface>().InstancePerRequest();
}