问题标签 [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 投票
1 回答
264 浏览

.net - 动态添加属性到类和属性

城堡里有什么东西可以让我即时为类添加属性吗?

我在一个项目中有一个 dto,我想在 wcf 服务中用作数据合同。我需要添加一个

属性到类,然后

到每个属性。

我可以只复制服务层中的类,然后将列表复制到新类型的新列表中,但那是一个问题。在dynamicproxy或某处必须有什么东西?

w://

0 投票
1 回答
901 浏览

c# - Castle DynamicProxy 接口代理生成

我有一个温莎集装箱。

我有一个ILazyComponentLoader(如果重要的话)和一个ISomething带有 Interceptor 属性的接口()。

我希望 Windsor 在ProxyGenerator.CreateInterfaceProxyWithoutTarget通过接口解析时使用,container.Resolve<ISomething>()以便我DynamicImplementationInterceptor可以在外部按需实现所有行为。

我似乎无法在文档中找到这个确切的场景......当我ISomething使用注册时Component.For<ISomething>()....,我如何指定我想要这种行为?(目前我得到一个关于类型是抽象或接口的错误,所以它不能被实例化......)

谢谢!

0 投票
1 回答
107 浏览

c# - 生成接口代理

在课堂上遇到问题;我有一个看起来像这样的课程:

自定义视图继承自基本 IView 实例。我遇到了一种情况,我需要动态创建一个自定义类来实现 IMyView 或 ISomeView(取决于某些场景)并访问模型,我想我可以使用像 Castle DynamicProxy 这样的工具来完成它。但我不太确定从哪里开始,我需要能够动态创建自定义 IMyView 或其他类实例。

谢谢。

0 投票
1 回答
1405 浏览

.net - Castle Windsor DynamicProxy 拦截 IInvocation 文档

在 Castle Castle.DynamicProxy.IInvocation 上,有什么区别

我阅读了文档,但我不明白其中的区别,尤其是前两者之间的区别。

我猜这Method只是实际注册类型上的方法的 MethodInfo 吗?

0 投票
1 回答
1265 浏览

structuremap - 用结构图做拦截

我正在尝试使用结构映射进行一些基于属性的拦截,但我正在努力解决最后的松散端。

我有一个自定义注册表来扫描我的程序集,并且在此注册表中我定义了以下 ITypeInterceptor,其目的是匹配使用给定属性修饰的类型,然后在匹配时应用拦截器。该类定义如下:

我正在使用 Castle.Core 中的 DynamicProxy 创建拦截器,但我的问题是从CreateInterfaceProxyWithTarget(...)调用返回的对象没有实现触发在结构映射中创建目标实例的接口(即 IOrderProcessor在上面的例子中)。我希望 IContext 参数会显示此接口,但我似乎只能掌握具体类型(即上面示例中的 OrderProcessor)。

我正在寻找有关如何使此方案工作的指导,方法是调用 ProxyGenerator 以返回一个将所有接口实现为目标实例的实例,通过从结构映射中获取请求的接口或通过某种其他机制。

0 投票
1 回答
1109 浏览

castle-windsor - 向由 DynamicProxy 动态创建的城堡注册组件

因此,我一直在努力构建一个解决方案,该解决方案只使用 Castle DynamicProxy(2.2 版)和拦截器来创建某些组件。一切看起来都很棒,除了在这一切结束时我意识到我需要将这些组件注册到 windsor 容器。这是可能的还是我的工作是徒劳的?

我将制作 2 个城堡配置来解释我的问题。第一个有效,而第二个无效。

第一个配置(这已经工作了一段时间):

第二个配置(我不知道在 type 属性中放什么,没有它就无法工作):

所以我制造的配置注册了工厂设施,然后我注册了工厂,然后注册了我的“ILoader”组件。“LocalFactory”为 ILoader 组件创建一个实际类型,而“RemoteFactory”使用动态代理创建 ILoader 组件,创建没有目标的代理。即我使用的是ProxyGenerator.CreateInterfaceProxyWithoutTarget方法,所以没有底层类。

那么,根据第二个配置注册组件有什么希望吗?

编辑:不幸的是,目前不能选择使用流畅的配置 API。所以为了缩小我的问题,是否可以使用 XML 配置来实现这一点?

0 投票
1 回答
1520 浏览

.net - 无目标接口的 Castle Windsor 代理

我有WindsorContainer一个IModelInterceptorsSelector。除了没有实现的组件(例如,所有行为都由 动态处理IInterceptor)之外,它运行良好。

如果我尝试仅使用接口解析组件,我会得到:

但是如果我在注册时手动指定拦截器,它工作得很好。这是温莎的错误还是我做错了什么?

重现的代码相当简单:

谢谢。

0 投票
1 回答
716 浏览

linq-to-sql - 需要使用 Castle Dynamic Proxy 拦截所有 LINQ-to-SQL 实体,可能使用 AutoMapper

当存储在数据库中时,我需要加密一组特定字段的值。我正在使用 LINQ-to-SQL。

我的方法:在将实体中匹配属性的值写入数据库之前对其进行透明加密。

我已经用 Castle Dynamic Proxy 编写了一个拦截器,它将加密 setter 上的相关属性并在 getter 上解密它。这是我的使用方法:

现在这一切都很好,但我不想手动将每个 SecretEntity 实例包装在动态代理中。所以我正在寻找一种自动化的方法,这样当我得到一个 SecretEntity 的实例时,它已经被包裹在代理中。

有没有办法通过以某种方式连接到 LINQ-to-SQL DataContext 来做到这一点,以便它返回代理?

我正在使用 MVC,所以我使用视图模型来显示我的数据,并使用 AutoMapper 在实体和视图模型之间来回映射。所以我在想,如果 LINQ-to-SQL DataContext 方法不起作用,也许可以挂钩到映射例程并在将实体映射到视图模型之前将它们包装在代理中。所以在使用 AutoMapper 的时候发现了一个叫做 BeforeMap 的方法,我很兴奋。所以我尝试了

但没有运气。我认为这是因为一旦 BeforeMap 方法完成运行,将“se”引用重新分配给代理就没有效果。

在创建新的 SecretEntity 时,我可以使用 Ninject 自动执行代理包装过程,但 Ninject 无法处理我从 DataContext 返回的现有实体。

我在 Castle Dynamic Proxy 上的步行只需要几个小时,而 AutoMapper 并不了解我。所以我希望有人可以给我一个快速的指针在哪里看。

谢谢你。

编辑

为了完整起见,我想我会为那些可能感兴趣的人添加我的拦截器的实现。不太了解 Castle Dynamic Proxy,我确信可能有更好的方法来处理拦截并检测它是 getter 还是 setter 等。如下:

0 投票
3 回答
573 浏览

c# - 没有基类问题,在这种特殊情况下如何使用 Castle.DynamicProxy Mixin?

我有一个我必须使用的设计糟糕的第 3 方库。
它有各种各样的类型,我们称它们为SomeType1SomeType2
。这些类型都不共享一个公共基类,但都有一个名为 Value 的属性,具有不同的返回类型。
我想要做的就是能够 Mixin 这个类,这样我就可以调用someType1Instance.Value并且someType2Instance.Value不关心它是什么 concreate 类型,也不关心返回类型是什么(我可以使用object)。
所以我的代码目前是:

问题是我直到运行时才知道 T 可能是什么,因为我得到了一个对象字典。

我可以迭代字典并使用反射在运行时创建 SomeWrapperType 但我想避免它。

如何将 SomeType 的 concreate 类型混合到 ISomeType?
我怎么知道V型参数是什么?(希望我有像 C++ 中的 typedef 和 decltype)

我怎样才能尽可能少地使用反射将这些类与接口/基类混合?

0 投票
3 回答
1337 浏览

.net - Castle Windsor InternalsVisibleTo Silverlight

我正在使用 Castle Windsor for SL v2.5.1.0。我有它代理内部类(接口当然是公共的,但实现是内部的,所以消费者只知道接口)。

我在我的程序集中使用以下属性和内部类

在完整的 .NET 4.0 模式下,使用 .NET 4.0 Castle 程序集,这可以正常工作,并且我的类型可以代理。在 Silverlight 中,使用 Silverlight Castle 程序集,我得到:

此外,只是在解决问题时,添加以下内容似乎没有任何区别......:

而且我还在运行时验证了 SL 中动态托管的程序集的名称实际上仍然是 DynamicProxyGenAssembly2。

有任何想法吗?谢谢。

编辑

我发现了我认为的问题:

.NET 4.0 的城堡有:

在 DefaultProxyBuilder...和 ​​SL 4 有

这是可以在城堡源中修复的东西吗?还是我需要/应该对 DefaultProxyFactory 进行子类化?