我需要为一个长期运行的windows服务提供一个api,该服务可以进行大量的处理,并保留对该历史的记忆。api需要提供系统当前活动级别的状态(已处理的记录、等待处理的记录等)。
我想使用一个自托管的Owin ApiController为系统提供一个很好的接口。但是,ApiController是完全无状态的,没有方法(在搜索了数十个IoC帖子之后)将已经活动的实例注入控制器。
有办法向ApiController提供类实例吗?
发布于 2016-08-10 19:19:50
我认为您不能注入控制器的旧实例,因为每次执行请求时都会得到一个新实例。
但是,您可以创建一个带有集合的单例对象,并且可以将其注入控制器构造函数中,并在每个请求中使用。
您还可以使用某种类型的持久性,如DB,您可以在设备上运行这种持久性。
下面是一个单例类的示例:
using System;
public class Singleton
{
public Dictionary<string,object> State {get; private set;}
private static Singleton instance;
private Singleton() {
State = new Dictionary<string,object>();
}
public static Singleton Instance
{
get
{
if (instance == null)
{
instance = new Singleton();
}
return instance;
}
}
}发布于 2016-08-10 19:21:18
尽管您可以在web控制器中获得会话状态,但它将是一个值得怀疑的解决方案,相反,我建议采用以下方式:
https://stackoverflow.com/questions/38881767
复制相似问题