1
3
用于拦截
要使基于继承的拦截成为可能,首先需要
然后,您可以像这样进行容器注册:
首先将服务注册为应用拦截器的服务(这将在服务上添加基于继承的拦截)。然后您可以注册将使用先前注册的服务的接口。 |
2
2
将您的注册更改为以下内容,Windsor应切换到类代理-即使用继承进行拦截,而不是组合。
|
3
1
我们使用
完整组件注册是
当然,你需要拦截的所有方法都应该是
然而,该解决方案的一个缺点是,在创建代理对象时不能使用构造函数注入。
请注意,您正在使用创建“虚拟”代理对象
然后
你也可以用
|
4
1
@我调查过的尼古拉·康德拉季耶夫
https://github.com/castleproject/Windsor/blob/master/src/Castle.Windsor/Windsor/Proxy/DefaultProxyFactory.cs#L110
我用简单的方法完成了注册:
笔记
|
5
0
我知道这是一条老线索,但我是在Blazor WASM(他们在Blazor-WASM)的城堡拦截器工作时偶然发现的 事实上 可以,但请注意…Mono似乎不支持代理任何具有任何泛型方法的类…)。
无论如何,在我的例子中,为了解决这个问题,我简单地将容器注入到我的类中,并在需要通过调用“兄弟方法”的方法中
在Blazor的客户端WASM应用程序的Program.cs中:
示例服务和接口实现:
赞成的意见 :不需要虚拟化方法或使DI配置复杂化。 欺骗 :有点恶心(对无状态存储库有用,但可能会让EF之类的东西心脏病发作)。 |
Nikolay K · Castle Windsor从类内拦截方法调用 8 年前 |
user3643376 · Unity ResolveAll泛型接口 9 年前 |
Ilias Kouroudis · 绕过Laravel服务提供商 9 年前 |
Wojciech Kozaczewski · 实体框架-容器的并发使用 9 年前 |
vishal mane · 在不使用容器的情况下从配置进行统一拦截 10 年前 |