使用Castle Windsor注册组件时指定实例的方法

19

我在这里有一个关于Castle Windsor的简单问题,我还没有使用它很长时间。我正在尝试注册一个服务并提供一个特定的实例,该实例将是该服务的单例实现。

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

我曾经尝试过使用以下代码,这让我有了一点希望:

container.Register(Component.For<IMyInterface>().Instance(serviceObj));
但是Castle对实例所做的全部工作只是在其上执行.GetType()并注册类型。对服务的请求随后将导致容器尝试创建该类型,并在无法填充依赖项时失败。那么有没有办法做到我想要做的事情呢?如果没有,我将创建某种IServiceProvider,以获取服务的实例,并且不需要填写容器的任何依赖项。但这感觉更像是一个解决方法而不是正确的解决方案。有什么建议吗?谢谢!
2个回答

30

尝试在容器的Kernel对象上使用AddComponentInstance方法。我认为这是您需要的。


请注意:此技术现已弃用。请改用container.Register(Component.For<T>().Instance(myT));代替(感谢eouw0o83hf)。


感谢Gerrie和Bojan!非常有效。 - Niall Connaughton
11
简要说明一下,该技术现已被废弃。请改用 container.Register(Component.For<T>().Instance(myT)); - eouw0o83hf
那个链接现在也失效了。 - Liam
在将实例添加到接口时遇到了问题。当我尝试将其注册为具体类时可以工作。 - Sonic Soul

3
您可以通过容器的 Kernel 属性来实现这一点:
container.Kernel.AddComponentInstance<IMyInterface>(serviceObj);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接