问题标签 [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.
delegates - Castle.DynamicProxy2 生成委托类型的代理
有没有办法创建委托类型的代理并让它在 DynamicProxy2 中实现其他接口,并且还能够拦截对生成的委托的调用?
我通常生成代理的方式会引发异常,因为委托类型是密封的。
.net - LinFu.DynamicProxy 和 Castle.DynamicProxy 有什么区别?
我正在考虑将逻辑添加到我正在处理的库中,这需要动态代理。我想从在生产环境中使用这两个库的用户那里得到一些建议。一个能胜过另一个,是否有任何缺点让你不得不切换到另一个,等等。基本上告诉我你在图书馆的经历。答案将帮助我决定使用哪一个。
- 编辑 -
我忘了提到我正在开发的库将支持 Mono,因此您可以分享关于这两个库的任何知识以及它们对 Mono 的支持也会很棒。
c# - 温莎城堡:如何检索特定实例的代理?
我在我的项目中使用 Castle Windsor。一些注册的组件被拦截。因为组件是通过接口注册的,Castle Windsor 创建了接口代理(Castle Windsor 创建了一个实现接口的独立类型,并通过使用组合委托给实际实现)。不幸的是,您不能在接口的实际实现中执行方法,因为代理会被绕过。
有没有办法获取代表实际实现中的实际实现的代理实例?
这是我想要实现的一个例子。我想总是拦截 Get 方法。请不要使用其他方法来重构此示例,因为这不是我的生产代码,而只是为了演示而发明的东西。
如何将字段 _this 设置为代理实例?
最好的问候
奥利弗·哈纳皮
PS:这是一个真实世界的例子。
我正在解决一个瞬态演示模型。它会注入一个瞬态视图。因为视图需要知道展示模型,展示模型调用 IView.SetModel(this) 让视图知道它的展示模型。
现在的问题是,虽然解析的 IPresentationModel 是一个代理,但 SetModel 方法只能获得真正的实现。因此,当视图调用表示模型上的方法时,不会触发任何拦截器。
到目前为止,我发现的唯一解决方案是在我解决了我的演示模型之后手动设置视图的演示模型。
我认为,这个解决方案并没有很好地解决。
c# - 获取代理对象的底层类型
我正在使用 Castle DynamicProxy,而我的 ViewModels 是一个代理,如下所示:
我的视图模型的代理看起来像这样:
{Name = "IRootViewModelProxyffecb133f590422098ca7c0ac13b8f98" FullName = "IRootViewModelProxyffecb133f590422098ca7c0ac13b8f98"}
我想获取被代理的实际类型的实际类型或命名空间。有没有办法做到这一点?我想要返回 MyApplication.ViewModels.MyViewModel 类型的东西。如果我使用 concreate 类作为代理,BaseType 返回被代理的实际类,但在使用接口时,BaseType 将返回 System.Object。
c# - 城堡动态代理创建
我正在实现一个设计,其中我的层将位于客户端和服务器之间,无论我从服务器获得什么对象,我都会将它包装在一个透明代理中并提供给客户端,这样我就可以跟踪对象中的变化,所以当保存回来时,我只会发送更改的信息。
我看了一下城堡动态代理,linfu,虽然他们可以生成代理类型,但是他们不能把现有的对象包装起来。
想知道是否可以使用这些框架,或者是否有任何其他框架可以实现这一点......
c# - NHibernate 代理验证器在 2.1 中的变化
有人可以帮我理解以下内容:
在以前的 NHibernate 版本(2.0.1)中,以下属性将验证并与 Castle 代理兼容:
但是,在 2.1 中错误地说类型应该是“公共/受保护的虚拟”或“受保护的内部虚拟”。我对此有疑问,因为使用“受保护的内部”标记属性会将属性暴露给其他程序集中的继承类型(有效保护或内部)。鉴于以前从来没有要求过,现在强加起来感觉有点糟糕。
有人可以解释为什么现在有这个要求以及它试图强制执行什么,这样我至少可以理解它打算实现什么。
如果不完全需要此限制,并且我 100% 确定这些类型的属性将永远不会映射到数据库属性,我打算使用 Castle 代理工厂和 2.0.1 中的类型验证器创建自己的 Mashup ByteCode 提供程序。但是,我绝对愿意接受任何建议。
c# - PostSharp 和 Castle 动态代理有什么区别?
只是想知道这些库之间的主要区别是什么,它们在特性和功能上有何不同。
希望获得比谷歌查询更多的信息......
c# - 在 NHibernate 对象上使用动态代理
我正在尝试使用 Castle.DynamicProxy2 来清理 NHibernate 持久类中的代码。这是它的一个简单版本。
宠物类:
及其映射文件:
需要审计 Pet 类的实例。通常,属性 Name 和 Age 不会是自动属性,而是包含记录值更改的逻辑。现在,我正在考虑使用代理在属性设置器中注入审计逻辑。为此,我创建了 Auditor IInterceptor:
使用 Castle.DynamicProxy2 创建 Pet 类的审核实例非常简单。
现在问题来了。由于 Pet 是持久化的,因此系统需要处理通过 NHibernate 获取的 Pet 实例。我想要发生的是 NHibernate 自动返回 Pet 代理的实例,如下所示:
我有这样的事情来解决它:
whereProxyHelper.GetProxyType<Pet>()
将返回缓存的 Pet 代理类型。主要缺点是该解决方案不适用于通用列表(例如IList<Pet>
)。我正在尝试清理的现有系统广泛使用它们。
因此,我希望是否有人对我正在做的事情是否可取有任何解决方法或任何见解。
太感谢了,
卡洛斯
castle-windsor - 用于私有/受保护方法的 Castle Windsor 拦截器
为了让温莎城堡的拦截器拦截一个方法,是否需要将该方法声明为 public?
nhibernate - Win2003 服务器上 .Net 3.5 SP1 上 Castle DynamicProxy2 的问题
我有一个 mvc + nh asp.net 应用程序。在我的开发机器(win 7 Ent)上一切正常,如果部署在 Win 2k3 上(尝试了 2 个不同的虚拟机和一个物理机器),我收到以下错误..
有人可以帮忙吗?无法解释这个问题(尝试了相同的构建,所以我认为这是机器配置问题)..
来自程序集“DynamicProxyGenAssembly2,版本=0.0.0.0,文化=中性,PublicKeyToken=null”的“CustomerProxy75950979a2a048e889584c21696f7f1b”类型中的派生方法“set_ID”无法减少访问
[TypeLoadException:来自程序集“DynamicProxyGenAssembly2,版本=0.0.0.0,文化=中性,PublicKeyToken=null”的类型“CustomerProxy75950979a2a048e889584c21696f7f1b”中的派生方法“set_ID”无法减少访问。] System.Reflection.Emit.TypeBuilder._TermCreateClass(Int32 句柄,模块模块)+0 System.Reflection.Emit.TypeBuilder.CreateTypeNoLock() +915 System.Reflection.Emit.TypeBuilder.CreateType() +108 Castle.DynamicProxy.Generators.Emitters.AbstractTypeEmitter.BuildType() +48 Castle.DynamicProxy。 Generators.ClassProxyGenerator.GenerateCode(Type[] 接口,ProxyGenerationOptions 选项)+3821 Castle.DynamicProxy.DefaultProxyBuilder.CreateClassProxy(Type classToProxy,Type[] additionalInterfacesToProxy,ProxyGenerationOptions 选项)+84 Castle.DynamicProxy.ProxyGenerator。CreateClassProxy(Type classToProxy, Type[] additionalInterfacesToProxy, ProxyGenerationOptions options, Object[] constructorArguments, IInterceptor[] 拦截器) +92 Castle.DynamicProxy.ProxyGenerator.CreateClassProxy(Type classToProxy, Type[] additionalInterfacesToProxy, IInterceptor[] 拦截器) +21 NHibernate。 ByteCode.Castle.ProxyFactory.GetProxy(对象 id,ISessionImplementor 会话)+283