城堡在深层次结构中解决

时间:2015-10-05 13:57:34

标签: c# dependency-injection castle-windsor

我在配置我们的城堡windsor ioc容器时遇到了问题。

我有以下结构:

SessionInfo : ISessionInfo

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

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

不幸的是,我无法访问调用Resolve部件的代码。我只能配置城堡windsor容器,最后得到Repository

我认为我需要能够像下面这样做一些注册,但是我无法让它工作:

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

无效的部分是DependsOn部分。 我是在正确的道路上还是我误解了什么?

2 个答案:

答案 0 :(得分:2)

幸运的是,我的一位同事有更好的方法来解决问题,我实施了这种方式。在这样做时,我认为我在这里发布的解决方案一般都不好。

<强>为什么吗

我是怎么想到这样做的?我看到了用于我的特殊情况的IConnectionInfo类的实现。我看到它依赖于ISessionInfo接口。如果我没有可能看到实施,我从未见过那种依赖。因此,我认为我想首先实现的解决方案不仅不好而且不好。

答案 1 :(得分:1)

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