城堡在深层层次结构中解析

Castle resolving in deep hierarchy

我在配置 castle windsor ioc 容器来执行我想要的操作时遇到问题。

我有以下结构:

SessionInfo : ISessionInfo

ConnectionInfo(ISessionInfo sessionInfo);
Repository(IConnectionInfo connectionInfo);

所有这些类都是由城堡实例化的。这是默认情况。现在我需要从外部修改 SessionInfo。为此,我实施了一个 StaticSessionInfo。现在我只有一种情况,其中 ConnectionInfo 对象不应该是 SessionInfo 对象,而是 StaticSessionInfo 对象。

遗憾的是,我无法访问调用 Resolve 部分的代码。我可以配置 castle windsor 容器,最后得到 Repository.

我想我需要像下面这样进行一些注册,但我无法让它工作:

windsorContainer
 .Register(Component.For<IRepository>()
                    .ImplementedBy<Repository>()
                    .Named("DynamicRepository")
                    .DependsOn(Dependency.OnComponent<ISessionInfo, IStaticSessionInfo>()));

不工作的部分是DependsOn部分。 我走在正确的道路上还是我误解了什么?

幸运的是我的一个同事有更好的方法来解决这个问题,我就是这样实现的。在这样做的同时,我认为我在此处发布的解决方案总体而言并不好。

为什么?

我是怎么想到这样做的?我看到了用于我的特殊情况的 IConnectionInfo class 的实现。我看到它依赖于 ISessionInfo 接口。如果我没有机会看到实现,我就永远不会看到这种依赖性。正因为如此,我认为我首先要实现的解决方案不仅不好而且不好。

您需要指定实现类型,而不是接口,作为 OnComponent 的第二个类型参数。