城堡在深层层次结构中解析
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 的第二个类型参数。
我在配置 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 的第二个类型参数。