我在配置我们的城堡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
部分。
我是在正确的道路上还是我误解了什么?
答案 0 :(得分:2)
幸运的是,我的一位同事有更好的方法来解决问题,我实施了这种方式。在这样做时,我认为我在这里发布的解决方案一般都不好。
<强>为什么吗
我是怎么想到这样做的?我看到了用于我的特殊情况的IConnectionInfo类的实现。我看到它依赖于ISessionInfo接口。如果我没有可能看到实施,我从未见过那种依赖。因此,我认为我想首先实现的解决方案不仅不好而且不好。
答案 1 :(得分:1)
您需要指定实现类型,而不是接口,作为OnComponent的第二个类型参数。