IActivationFactory可以多次返回同一个实例吗?

时间:2014-08-13 08:47:44

标签: windows-runtime c++-cx rcw wrl

在探索WinRT时,我做了一个单身实验:通过自己实现IActivationFactory,我可以在ABI级别创建一个单例。工厂每次只返回相同的实例。通过扩展,对我的类型的任何RoActivateInstance调用都将返回相同的指针。

与.NET互操作时,奇怪的是几乎透明:

var obj1 = new MySingleton();
var obj2 = new MySingleton();

// At the .NET type level, not the same: ReferenceEquals(obj1, obj2) == false
// At the COM level, the same: Marshal.GetIUnknownForObject(obj1) == Marshal.GetIUnknownForObject(obj2) 

我解释这个的方式是每个实例化都为WinRT对象生成一个新的RCW。因此,它与单身人士并不完全相同,但可能足够接近。

我没有检查其他语言预测。

我的目的是将此用于 immutable 对象,它们甚至可能没有任何构造函数参数。 (如果他们这样做,激活工厂将需要保留实例映射。)好处主要是减少了内存占用。

但我在这里踩着危险的水吗?我在COM / ATL中看到了类似的结构,但在WinRT中呢?

0 个答案:

没有答案