代码之家  ›  专栏  ›  技术社区  ›  Niall Connaughton

指定在Castle Windsor注册组件的实例

  •  17
  • Niall Connaughton  · 技术社区  · 17 年前

    我有一个关于温莎城堡的简单问题,我已经很久没用了。我正在尝试用一个特定的实例注册一个服务,该实例将是该服务的单例实现。

    容器无法尝试创建服务本身的实现,因为它具有容器无法解析的依赖项。我有一个服务实例,我希望它是任何请求服务的人所使用的唯一实例。但我似乎运气不好。

    我很快就希望使用这个代码:

    container.Register(Component.For<IMyInterface>().Instance(serviceObj));
    

    但Castle对实例所做的全部工作就是在它上面执行.getType()并注册该类型。对服务的请求随后将导致容器尝试创建该类型,当它无法填充依赖项时失败。

    那么有什么方法可以做我想做的吗?如果没有,我将创建某种IServiceProvider,它获取服务的实例,并且不依赖于要填充的容器。但这似乎更像是一种工作,而不是正确的解决方案。

    有什么建议吗?谢谢!

    2 回复  |  直到 13 年前
        1
  •  26
  •   Rob Fonseca-Ensor    13 年前

    尝试使用 AddComponentInstance 容器的内核对象上的方法。我想这就是你需要的。


    请注意: 此技术现在已被弃用。使用 container.Register(Component.For<T>().Instance(myT)); 相反(感谢Eouw0o83hf)

        2
  •  2
  •   Bojan Resnik    17 年前

    你可以通过 Kernel 容器属性:

    container.Kernel.AddComponentInstance<IMyInterface>(serviceObj);