【问题标题】:Using ServiceStack's Funq to LazyResolve dependencies使用 ServiceStack 的 Funq 解决依赖关系
【发布时间】:2018-06-27 18:21:55
【问题描述】:

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

请求进来:

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

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

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

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

但是,正因为如此,我不能只在启动时在容器中注册 IManager 和 IRepository 的实现 - 这需要根据请求动态解决。我想做某种类型的 LazyResolve,但我找不到任何可靠的例子来说明如何做到这一点让我从这里开始。

我在这里想疯了吗?我的 API 基本上就是这样 - 发生的自定义逻辑与在运行时调用的客户端特定程序集隔离。这一切在理论上对我来说都是完全合理的,但在实践中它被证明是一个挑战。想法?想法?

【问题讨论】:

    标签: servicestack inversion-of-control funq


    【解决方案1】:

    如果您只想在运行时解决临时依赖项,您可以根据服务中的需要从 IOC 解决它们:

    base.TryResolve<T>();
    

    在来自IRequest 的任何过滤器中:

    req.TryResolve<T>();
    

    或在 ServiceStack 外部使用:

    HostContext.TryResolve<T>();
    

    【讨论】:

      猜你喜欢
      • 2014-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-18
      • 1970-01-01
      • 2019-04-27
      • 2016-01-06
      相关资源
      最近更新 更多