问题标签 [windsor-3.0]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
1006 浏览

castle-windsor - AOP 与温莎城堡

我想要实现的是使用 Castle Windsor 拦截器通过属性实现的 AOP。我取得了一些成功,但在类级别与方法级别的方面存在问题。

  • 如果我只使用类级别的属性,所有的方法都会被拦截。
  • 如果我只使用方法级别的属性,这些方法将被拦截。
  • 如果我添加一个类级别的属性和一个方法级别的属性,这两种拦截都会发生在被赋予属性的方法上,但那些没有被赋予属性的方法不会被拦截。

所以给定这个组件:

我希望记录器方面能够拦截ShouldBeInterceptedByExceptionLogger(),但除非我从其他方法中删除秒表方面,或者从类中删除记录器方面并将其添加到ShouldBeInterceptedByExceptionLogger(). 但是ShouldBeInterceptedByStopWatch_AND_ExceptionLogger()两者都拦截了。

整个示例应用程序可以在 - https://bitbucket.org/jayala/juggernet-aop找到

基本上它所做的是使用一个工具来注册一个IContributeComponentModelConstruction,如果它在类级别找到一个方面,它将添加一个拦截器,或者如果它在方法级别找到一个方面,则添加一个拦截器+方法挂钩。

这就是我引导容器的方式:

这些设施正在做的是注册一个拦截器和一个像这样的模型贡献者

0 投票
2 回答
1631 浏览

castle-windsor - Castle Scoped Lifestyle 不起作用

试图找到造成这种情况的真正原因却没有太多乐趣!

考虑到我没有在使用这种生活方式的容器中注册任何内容,这看起来像是一个错误。

0 投票
2 回答
456 浏览

castle-windsor - 使用两项服务注册相同的课程 - 分两步 - 在 Castle Windsor

我有一些执行器类实现了一个或两个接口(IHandleMessages<> 和/或 CommandExecutor<>)。

我可以将所有这些执行程序类(使用它实现的两个接口中的任何一个或多个)注册为服务吗?最终不会将类上的所有其他接口也作为服务。

我最初的尝试是这样的:

但这不起作用。有解决方案吗?

我正在使用温莎 3.1.0。

编辑:我想我真正要问的是:是否可以两次找到相同的类型,然后让发现者在该类型的注册中添加更多服务?

0 投票
1 回答
304 浏览

castle-windsor - Windsor 是否能够注册具体类的实例集合?

如果我有接口和实现类,比如

那么这个注册就好了

如同

但是,如果我尝试将具体类注册为

它抛出一个异常:Castle.MicroKernel.ComponentRegistrationException : Component X could not be registered. There is already a component with that name. Did you want to modify the existing component instead? If not, make sure you specify a unique name.

如果这是有意的限制 - 为什么?有没有什么方法可以在不添加并不总是需要的接口的情况下实现集合解析?

0 投票
1 回答
926 浏览

c# - 类型化工厂设施创建递归嵌套实体

考虑需要创建一些递归嵌套事物的情况,例如:

明显的实现是这样的:

该测试通过。但是,如果您尝试对 Windsor 的 Typed Factory Facility 做同样的事情:

它失败了,但有以下例外:

很明显,为什么这样的代码在服务的情况下会失败,但对于工厂来说,这似乎是不必要的限制。我想留在工厂变体中,因为我在那里有一堆容器解析的依赖项,而不是普通的 int 。

0 投票
1 回答
392 浏览

castle-windsor - 是否有可能在满足属性依赖之前获得正在解析的组件实例?

基本上,如果类AB在 Windsor 中注册,我希望能够以X这样的方式解决依赖关系,即它获取所需的类的实例。

在纯代码中,它看起来像这样:

温莎有没有办法做到这一点,也许是通过一些可扩展性机制?


即使对我来说,这看起来也是一个疯狂的问题,所以这背后有一些动机:

上面的X示例ITracer中的代理TraceSource是为每个跟踪的消息添加一些信息,即所有者的唯一 ID 及其类型(现在它只是 ID - 这就是问题的原因 - 我无法得到到实例并调用GetType()它)。

一个简单的例子使它更清楚。假设您有一些服务IService,并希望以最非侵入性的方式向它添加跟踪。但是在应用程序中可能有十几个此服务的实例,因此在跟踪中您希望通过 ID/类型来区分它们。如果类从容器接收它的跟踪器并在需要时在那里写消息,而不考虑 ID、具体TraceSource等,那就太好了。

我已经有一些基础设施可以让我这样写:

并且 Windsor 正确地解析Tracer为它自己的(不与其他对象共享)ITracer指向TraceSourcename的实例NameOfTheTraceSource。此外,如果我添加traceAllMethods = true到属性 - Windsor 将自动添加拦截器,它将通过相同的方式记下此实例上的每个方法调用Tracer(并且仅在相应TraceSource配置了一些侦听器时才会这样做 - 我们不必支持将它们添加到飞)。这真是太棒了,因为它不需要开发人员提供任何东西Service,并且在不需要时不会降低性能,一点也不。所以我正在努力让这更方便:)

0 投票
1 回答
1260 浏览

c# - 使用 SignalR Hub 内的 Windsor Castle 工作单元

我正在使用 SignalR 和 Windsor Castle 从事 ASPNET MVC 4 项目。我的 mvc 控制器和 WebApi 控制器可以使用 Castle 正常工作和实例化,但是我的 Unit of Work 类在 SignalR 的集线器内使用时没有实例化。

有什么我想念的吗?

这是我的代码:

IocConfig 类

WebWindsorInstaller 类

ControllerInstaller 类

中心

在 Send 方法中,Uow 为空。

控制器继承自这个基类

当我在控制器中使用 Uow 时,它会被实例化。我不明白在集线器内使用它的区别。

笔记

我正在按照此处找到的有关如何设置 Windsor Castle 以使其与 SignalR 一起使用的说明进行操作,但我无法对其进行测试,因为我收到以下错误(似乎无法创建代理):

表示未创建集线器的代理

这就是我在服务器中的方式

公共类 IServerHub : 集线器

在客户端像这样

var clientServerHub = $.connection.iServerHub;

我可以在这里看到动态创建的文件:

/GdpSoftware.Server.Web/signalr/hubs

那么,为什么没有创建代理?

这是我的安装程序文件

提前致谢!吉列尔莫。

0 投票
1 回答
872 浏览

dependency-injection - Castle Windsor ISubDependencyResolver 获取参数名称

我在使用 Castle Windsor ISubDependencyResolver 获取参数名称时遇到了一点问题。我有类似下面的代码,对于 Foo,我希望 myBar.BarName 为“Foo_myBar”

有什么方法可以在 ISubDependencyResolver 中获取“myBar”?

我需要这个在 Foo 中有多个具有不同配置的 IBar 实例。

0 投票
1 回答
585 浏览

.net - 未找到 NServiceBus.Address 的处理程序

我使用 Castle Windsor 的 3.2.0 版和 NServiceBus 的 3.3.5 版。

我在这样的控制台应用程序中配置我的总线:

此总线将仅由此控制台应用程序用于向总线发送消息,因此我不使用 nservice 总线主机。

浏览该行代码时,应用程序抛出异常,指出找不到 NServiceBus.Address 的处理程序。事实上,检查我的容器,我没有看到任何注册。

0 投票
0 回答
185 浏览

c# - WindsorContainer TypedFactory 如何将参数传递给间接对象

我知道 TypedFactory 工具只会将给定的参数传递给它正在解析的对象。但是有没有办法将相同的参数传递给所有正在解析的间接对象?

我一直在尝试使用定义为的自定义范围来做到这一点

我有以下类结构:

我在 windsorcontainer 中注册它们:

我正在使用它:

第一遍有效,但我希望 ScopeAccesor 在 _contaier.BeginScope() 存在 using 块时被释放。这不会发生,第二遍将获得与第一遍相同的参数。