C# 深层层次中的城堡解析

C# 深层层次中的城堡解析,c#,dependency-injection,castle-windsor,C#,Dependency Injection,Castle Windsor,我在配置我们的castle windsor ioc容器以执行我想要的操作时遇到问题 我的结构如下: SessionInfo : ISessionInfo ConnectionInfo(ISessionInfo sessionInfo); Repository(IConnectionInfo connectionInfo); 所有这些类都由castle实例化。这是默认情况。现在我需要从外部修改SessionInfo。为此,我实现了一个StaticSessionInfo。现在我有一个例子,Con

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

我的结构如下:

SessionInfo : ISessionInfo

ConnectionInfo(ISessionInfo sessionInfo);
Repository(IConnectionInfo connectionInfo);
所有这些类都由castle实例化。这是默认情况。现在我需要从外部修改
SessionInfo
。为此,我实现了一个
StaticSessionInfo
。现在我有一个例子,
ConnectionInfo
对象不应该是
SessionInfo
对象,而是
StaticSessionInfo
对象

不幸的是,我没有访问调用解析部分的代码的权限。我只需配置castle windsor容器,并在最后获得
存储库

我想我需要的能力,做一些登记如下,但我不能让它工作:

windsorContainer
 .Register(Component.For<IRepository>()
                    .ImplementedBy<Repository>()
                    .Named("DynamicRepository")
                    .DependsOn(Dependency.OnComponent<ISessionInfo, IStaticSessionInfo>()));
windsorContainer
.Register(Component.For())
.由()实施
.命名(“动态还原”)
.DependsOn(Dependency.OnComponent());
不工作的零件是
DependsOn
零件。
我是走对了路还是误解了什么

幸运的是,我的一位同事有一个更好的方法来解决这个问题,我就是用这种方法实现的。在这样做的时候,我认为我在这里发布的解决方案总体上是不好的

为什么?


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

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

为什么?


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

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

为什么?


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

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

为什么?



我是怎么想到这样做的?我看到了用于我的特例的IConnectionInfo类的实现。我看到它依赖于ISessionInfo接口。如果我没有机会看到实现,我就从来没有见过这种依赖。因此,我认为我想首先实现的解决方案不仅不好,而且不好。

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

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

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

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

您不需要指定实现类型,而不是接口,作为
OnComponent
?@PhilDegenhardt的第二个类型参数,如果您是对的,这是有效的,您可以将您的评论作为答案提交,我将其标记为解决方案。但我不会使用这种方法,因为我认为这通常不是一个好的解决方案,更多信息请参见我的答案。您不需要指定实现类型,而不是接口,作为
OnComponent
?@PhilDegenhardt的第二个类型参数吗?您是对的,这很有效,您可以将您的评论作为答案提交,我会将其标记为解决方案。但我不会使用这种方法,因为我认为这通常不是一个好的解决方案,更多信息请参见我的答案。您不需要指定实现类型,而不是接口,作为
OnComponent
?@PhilDegenhardt的第二个类型参数吗?您是对的,这很有效,您可以将您的评论作为答案提交,我会将其标记为解决方案。但我不会使用这种方法,因为我认为这通常不是一个好的解决方案,更多信息请参见我的答案。您不需要指定实现类型,而不是接口,作为
OnComponent
?@PhilDegenhardt的第二个类型参数吗?您是对的,这很有效,您可以将您的评论作为答案提交,我会将其标记为解决方案。但我不会用这样的方法,因为我认为这通常不是一个好的解决方案,更多信息请参见我的答案。很高兴听到。如果你能展示另一种方法,可能会对其他用户有所帮助。我的方法是针对我们的应用程序的,但也可能对其他人有所帮助。我们有一个SOA,castle为每个服务调用解析存储库和其他组件。调用服务时,可以指定会话。因此,我没有在当前的服务中执行我的工作,而是使用所需的会话调用另一个服务。这样我就可以从盒子里拿出我所需要的。很高兴听到你这么说。这可能会有帮助