在城堡.是否可以在初始化后改变mixin的值

本文关键字:改变 mixin 的值 城堡 是否 初始化 | 更新日期: 2023-09-27 17:49:31

我注意到DynamicProxy对象可以实现一个IChangeProxyTarget接口,它允许你做一些类似于((IChangeProxyTarget)myProxyObj).ChangeInvocationTarget(newTarget)的事情。

是否有一种方法可以类似地改变动态代理对象上的mixin实现?显然,这比我没有完全考虑过的改变目标的方式(由于不同的接口实现,混合的多样性等)更复杂和微妙,但这个概念并非完全不可想象。

或者缺少这一点,有什么想法来实现这一点,在一个合理的性能方式?我有一些关于黑客入侵的理论想法,但它似乎非常非常复杂:

  1. 定义一个MixinSwitcher类(和伴随的IMixinSwitcher接口)与Action<object, object> DoSwitch属性
  2. 在创建DP对象时混合一个实例。proxyGenerationOptions.AddMixinInstance (mixinSwitcher);
  3. 创建DP对象var dpObj = proxyGenerator.Create... -确保在接口上添加IMixinSwitcher来实现
  4. 使用反射on从dpObj.Gettype()中找到相关的mixin MemberInfo
  5. 使用System.Reflection.Emit为这个属性生成一个快速设置器。
  6. 设置mixinSwitcher.DoSwitch = (SRE setter method here)
  7. ((IMixinSwitcher) dpObj)。DoSwitch (dpObj newMixinValue)
  8. 利润……或者大脑融化?

步骤1类可以被泛化,以允许它针对特定/多个实现;步骤4-5被缓存以获得额外的性能,而一般的步骤1实现可以被清理。

即便如此,我也不否认这很疯狂——有更好的方法吗?

在城堡.是否可以在初始化后改变mixin的值

不,这是不支持的,主要是因为没有人想出一个好的场景,这将是有用的。你的设想是什么?为什么您希望能够交换mixin目标?