使用ServiceStack的Funq来LazyResolve依赖项

时间:2018-06-27 18:21:56

标签: servicestack inversion-of-control funq

我们正在Web托管的API服务中使用ServiceStack,并且已经有一段时间了。任何请求的执行路径都遵循以下模式:

请求进入:

->服务(处理请求,利用通过构造函数注入的IManager)

-> IManager(执行业务逻辑,利用通过构造函数注入的IRepository / ie)

-> IRepository / ies(SQL Server,NoSQL,利用由构造函数注入的连接工厂/ ie)

现在,我们正在招待另一个客户,其中一些请求需要遵循略有不同的业务逻辑,并可能利用不同的回购策略。但是,API将保持一致。为此,我提取了特定于客户端的逻辑(上面的具体IManager和IRepository实现)来分离程序集。我已经编写了一个组件,该组件可以检查当前请求上下文,标识该请求所针对的客户端,然后使用反射和Activator实例化我要针对任何给定请求执行的特定实现的实例。

但是,由于这个原因,我不能在启动时仅在容器中注册IManager和IRepository的实现-需要根据每个请求动态解决此问题。我想做某种类型的LazyResolve,但找不到任何可靠的例子来说明如何使我从这里开始。

我在这里疯了吗?我的API本质就是这样-发生的自定义逻辑与运行时调用的客户端特定程序集隔离。从理论上讲,所有这些对我来说都是完全合理的,但实际上,这是一个挑战。有什么想法吗?想法?

1 个答案:

答案 0 :(得分:1)

如果只想在运行时解析即席依赖,则可以根据需要在Service中使用IOC来解决它们,

base.TryResolve<T>();

IRequest中的任何过滤器中,

req.TryResolve<T>();

或在ServiceStack外部使用:

HostContext.TryResolve<T>();