我需要为长时间运行的Windows服务提供api,它会进行大量处理并保留该历史记录。需要api来提供系统当前活动级别的状态(处理的记录,等待处理的记录等)。
我想使用自托管的Owin ApiController为系统提供一个很好的界面。但是,ApiController是完全无状态的,并且没有方法(在搜索了几十个IoC帖子之后)将已经活动的实例注入控制器。
有没有办法为ApiController提供类实例?
答案 0 :(得分:1)
我认为您不能注入旧的控制器实例,因为每次执行请求时都会获得一个新实例。
但是你可以在里面创建一个带有集合的单例对象,你可以将它注入控制器构造函数并在每个请求中使用。
您还可以使用某种持久性,例如DB,您可以在设备上运行。
以下是单例类的示例:
var that = this;
this.menu.togglemenu = function() {
if (that.menu.state === 'inactive'){
that.menu.state = 'active';
}
else {
that.menu.state = 'inactive';
}
}
答案 1 :(得分:1)
即使你可以在web api控制器中获得Session状态,但这将是一个值得怀疑的解决方案,相反,我建议采用以下方式:
包含Hangfire作为依赖,并将其用于长时间运行的任务
从您的API方法返回JobID并在客户端上使用它来订阅signal-r hub