首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hangfire、Autofac和WebApi

Hangfire、Autofac和WebApi
EN

Stack Overflow用户
提问于 2015-07-08 15:21:18
回答 2查看 1.2K关注 0票数 3

我最近了解了Hangfire,但到目前为止还没有任何收获。我的项目使用autofac,所以我在项目中添加了HangFire.1.4.3 &HangFire.Autofac.1.1.0Nuget包。接下来是文档,我在那里创建了Startup类并注册了Hangfire

代码语言:javascript
复制
public void Configuration(IAppBuilder app)
{
      GlobalConfiguration.Configuration
                    .UseSqlServerStorage("NavigatorConnectionString");

       app.UseHangfireDashboard();
       app.UseHangfireServer();
}

在那之后,我已经更新了WebApiConfig并在Hangfire中注册了我的Autofac容器

代码语言:javascript
复制
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作业时

代码语言:javascript
复制
IObject someObject = MyObject();    
var jobId = BackgroundJob.Enqueue<IMyInterface>(x
                    => x.MyMethod(someObject));

我得到以下错误

System.InvalidOperationException类型MyNamespace.IMyInterface在Hangfire.Storage.InvocationData.Deserialize()不包含带有签名MyMethod(IObject1)`的方法会有什么问题?

EN

回答 2

Stack Overflow用户

发布于 2015-07-09 16:23:14

这个问题是在工作中遇到的问题。它序列化参数,如果是泛型,就不能将其序列化。解决方法是创建一个可以轻松序列化/期望序列化的中介器,并运行所需的代码。

票数 0
EN

Stack Overflow用户

发布于 2019-09-17 00:19:41

您需要在Startup.cs文件中添加以下代码。

代码语言:javascript
复制
private void ConfigureAutofac(HttpConfiguration config, IAppBuilder app)
{        
   var requestTag = MatchingScopeLifetimeTags.RequestLifetimeScopeTag;
   var jobTag = AutofacJobActivator.LifetimeScopeTag;
   builder.RegisterType<MyClass>().As<IMyInterface>().InstancePerRequest();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31285996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档