问题标签 [castle-dynamicproxy]

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 投票
2 回答
2802 浏览

c# - 应用面向方面的编程

我一直在使用一些基本的 AOP 风格的解决方案来解决安全、日志记录、验证等横切问题。我的解决方案围绕着Castle Windsor和 DynamicProxy,因为我可以使用基于 Boo 的 DSL 应用所有内容并保持我的代码没有属性. 周末有人告诉我看一下PostSharp,因为它应该是一个“更好”的解决方案。我已经快速浏览了 PostSharp,但我被 Attribute 的使用吓到了。

有没有人尝试过这两种解决方案并愿意分享他们的经验?

0 投票
2 回答
1233 浏览

inversion-of-control - 在 Windsor 容器中使用 DynamicProxy 作为装饰器模式

我正在寻找有关使用和配置 Windsor 以提供动态代理来拦截对另一个类的实例的调用的一些信息。

我的类表示一个资源,出于性能原因,该资源应该由容器作为长期存在的实例保留。但是,有时此资源可能会转变为不可用状态,并且需要更新。我希望容器来处理这个,所以客户端代码不必这样做。我可以创建自己的工厂来做到这一点,我想知道是否有一些温莎注册很酷可以为我做这件事,所以我不必创建单独的工厂类:)

下面是一些伪代码来演示这个问题:

任何想法如何实现我的 RealResourceInterceptor 类,以及如何配置容器以使用它?谢谢!

0 投票
3 回答
787 浏览

castle-windsor - Windsor MixIn 是单身人士?

我有一个 MixIn 需要一些状态才能运行。

我是这样注册的。。

当我调用 container.Resolve(of ICat) 时,我得到了 ICat 的代理,它也实现了 IMixin。

但是,如果我再次调用 container.Resolve(of ICat),我会得到一个新的 ICat 代理,但 MyMixin 是相同的实例。(这是有道理的,因为我没有告诉容器以任何方式创建 IMixin)

所以,IMixin 是一个 Singleton,尽管组件的生活方式是 Transient。

我如何通过 Fluent Interface 告诉 Windsor 为组件创建一个新的 MyMixIn 实例?

0 投票
2 回答
2399 浏览

target - Castle DynamicProxy2: Get the Target inside an Interceptor?

I'm using Castle DynamicProxy2 to "tack on" interfaces to retrieve fields from a dictionary. For example, given the following class:

I want to use the following interface as an interface proxy to extract the "Name" value out of the Fields dictionary:

From an interceptor, I want to get the "target" DataContainer, and return the "Name" value:

Any thoughts on how to get the underlying target

Note: this is a contrived example I'm using to establish some context around the question I have.

0 投票
2 回答
1069 浏览

debugging - 为什么获取使用 Moq 创建的模拟实例会引发 System.BadImageFormatException?

这个问题可能与另一个问题有关,它肯定会导致 System.BadImageFormatException。也许它是同一件事,但暴露方式不同?

我有以下代码:

然后我有一个使用 Moq 模拟 IFooRepo 的测试,如下所示:

上面的代码运行良好,除非在使用 Visual Studio 2008 调试测试时。当我越过上面的行时,System.BadImageFormatException 会通过 Castle.DynamicProxy 从 System.Reflection.Emit 抛出。这可能类似于Ayende Rahien 发布的内容吗?

现在的解决方法是为 IFooRepo 实现一个假的,但我很好奇为什么会为这种场景生成一个糟糕的图像并且有解决办法吗?System.Reflection.Emit 有问题吗?还是我在自己的代码中遗漏了一些明显的东西?

编辑:为 GetFoo() 发布了不正确的签名。将签名更正为 GetFoo<T, F>(),从而正确重现了问题。安装 GDR 后,此问题仍然存在。

编辑:似乎如果对 F 的约束包括类型参数 T BadImageFormatException 就会引发。但是我将其更改为,例如where F : class, new(),然后一切都按预期工作。

0 投票
2 回答
964 浏览

wcf - 使用动态代理和 wcf 序列化问题的通用 IPropertyChangedNotifier

我已经使用城堡动态代理实现了一个通用的 IPropertyChangedNotifier。在这里,我拦截了 Proxy 对象中的 setter 调用,这样我就不必在我的域对象的 setter 中引发 PropertyChanged 事件。

目的是使用这些代理对象将其 UI 绑定到 silevrlight 应用程序中。

问题是代理对象的序列化在 WCF 服务调用中失败,这是由于代理对象上没有 [DataContract]。为了解决这个问题,我必须在我的拦截器中保留一个实例的副本并将这个对象发送给序列化。IPropertyChangedNotifier

这导致了难以调试或理解的复杂代码。有没有一种简单的方法来解决 WCF 中的序列化问题,告诉序列化程序在服务调用中发送代理时使用基类(实例)的 [DataContract] 属性。

0 投票
1 回答
473 浏览

c# - 在动态代理中保留基类属性

我正在使用 Castle DynamicProxy2。是否可以告诉代理对象继承其基类(代理类)的属性和基类属性的属性。如果不可能在城堡里。任何其他为此目的的图书馆?

我在这里发布了问题的来源Generic IPropertyChangedNotifier using Dynamic Proxy and wcf serialization question

0 投票
2 回答
1117 浏览

c# - 在编译时类型未知时使用泛型

平台:C# 2.0 WinForms

我有一个工厂类,它根据我发送的类型提供特定数据映射器的实例化,代码如下:

我正在使用 DynamicProxy2 来拦截对我的 DTO 对象的方法调用。在我的拦截方法中,我试图使用 Invocation.TargetType 中的类型调用上述工厂。然而,这回来了一个例外:

找不到类型或命名空间名称“调用”。

显然这是因为对泛型方法的任何调用都需要根据我在编译时的理解明确知道类型。显然,在这种情况下我不能这样做,而且我绝对不会在我的所有 DTO 对象上执行 switch 语句。

那么,你们能提出一个策略或指出我做错了什么吗?我正在尝试使其尽可能通用,以便它可以适用于我的所有对象和任何新对象以及其他项目的代码可移植性。

提前致谢!

0 投票
1 回答
404 浏览

c# - Castle.DynamicProxy2 并在运行时添加属性

我正在使用 Castle.DynamicProxy2 并且我正在实例化我的代理:

我的 IEntityStatus 界面如下所示:

我需要能够在运行时使用该属性,以便当我的 DTO 发生属性更改事件时,该事件可以将 DTO 设置为脏。但是,因为它是一个接口并且没有明确的实现,所以我不知道如何做到这一点。为 get 和 set 方法创建一个委托是我想避免的一个选项。那么还有另一种方法可以实现我想要实现的目标吗?

我意识到我可以设置我所有活动 DTO 的集合,并且当属性更改事件在其中一个 DTO 上触发时,我可以更新该集合以显示该特定 DTO 是脏的,但我真的希望这些信息是代理 DTO 的一部分,用于纯粹的语法简化。

期待回复!

0 投票
4 回答
1688 浏览

.net - 如何在不引用 Castle DynamicProxy 的情况下检测 Type 是否是生成的 DynamicProxy?

我正在使用城堡 DynamicProxy 并且想知道是否有一种方法可以在不引用 Castle DynamicProxy 的情况下检测类型是否为代理?

因此,当我使用 Castle DynamicProxy 作为示例时,我想要适用于任何内存生成类型的代码。

谢谢