问题标签 [realproxy]

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 回答
84 浏览

c# - Casting 和 As 运算符分别导致被转换的对象和空引用

这个问题几乎纯粹是为了学习目的。使用的环境是 Unity 3D 引擎。

我一直在 C# 中使用 RealProxy 和 MarhalByRefObject 类来装饰我的一个类。具体来说,我使用下面的构造函数创建了一个通用代理类。我正在装饰的类也有一个 SerializableAttribute,同时继承自 MarshalByRefObject。

获取装饰对象,最简单的代码(不带装饰)如下

这就是奇怪的地方。我通过反射检查了类型,它确实和我要装饰的对象是同一类型。然而,令人困惑的部分是,当我正常转换(ClassA)时,我得到一个对装饰对象的引用,而当我使用 as 运算符时,返回一个空引用。

我在测试 Unity v. 2019.1.8f1 的构建时发现了这种行为。我使用的脚本运行时版本和 API 都是 .NET 4.x 等效版本。

如果有人遇到过类似的问题,我很想听听他们的情况,因为不应该发生铸造和操作员行为不同的情况,这可能会导致大量时间和精力的损失。我并不是真的在寻求解决方案,而是寻求可能比我有更好想法或遇到类似问题的人的意见。

注意:如果我只是这样做,则不会发生此行为

编辑:经过进一步调查,我注意到 as 操作员基本上是这样做的

发生的事情是 is 运算符返回 false。

在此处提供重现问题所需的所有代码。

此外,检查每个“铸造”返回的代码:

0 投票
0 回答
34 浏览

c# - 使用 Autofac 注册动态代理

目标

我正在尝试迁移到 .net 标准,因此需要将 RealProxy 迁移到 Dispatch Proxy。

当前设置

我正在使用 Autofac 进行依赖注入。

配置绑定到实现 ISettings 的“设置”类。

我使用构造函数注入将设置注入我的类并检索设置的值,如下所示:

通过从 MySettingsProxy 实例注册透明代理,向 Autofac 注册设置:

MySettingsProxy 是 RealProxy 的一个实现。

IConfiguration _configuration 中的部分绑定到 ISettings 类。

现在,当我在应用程序运行时更改 _configuration 的内容并将 _configuration 的部分重新绑定到 ISettings 类时,它反映了从构造函数注入访问设置时的新值。

迁移到 Dispatch Proxy 后的更改

我的 SettingsProxy 现在看起来像这样:

并且代理注册到 Autofac 容器,如下所示:

其他一切仍然相同,但是在访问构造函数注入设置时,它们没有来自 _configuration 的新值

我的 Dispatch Proxy 设置有什么不同的想法吗?