C# 深层层次中的城堡解析
我在配置我们的castle windsor ioc容器以执行我想要的操作时遇到问题 我的结构如下: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
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为每个服务调用解析存储库和其他组件。调用服务时,可以指定会话。因此,我没有在当前的服务中执行我的工作,而是使用所需的会话调用另一个服务。这样我就可以从盒子里拿出我所需要的。很高兴听到你这么说。这可能会有帮助