Skip to content

Activation Factory 在 Windows Runtime 中承担的角色

原文:The role of the activation factory in the Windows Runtime
日期:2024年8月22日

Windows Runtime 具有称为激活工厂(Activation Factory)的东西,你可以通过调用RoGetActivationFactory来获取这些工厂。那什么是激活工厂?

激活工厂的主要用途正如其名:激活(创建)对象。每个激活工厂都实现IActivationFactory接口,该接口只有一个方法:ActivateInstance,可以创建并返回一个对象。

目前,IActivationFactory::ActivateInstance方法不接受任何输入参数,因此仅当对象具有默认构造函数(无参数)时,才能使用此方法。如果你的类有接受参数的构造函数,那么你得考虑更多。

类的非默认构造函数通常放置在名为IWidgetFactory的自定义接口上。例如,如果你有一个 runtime class,该类的构造函数采用字符串参数:

c++
runtimeclass Widget
{
    Widget(String name);
}

IWidgetFactory接口将具有类似如下的方法:

c++
HRESULT IWidgetFactory::CreateInstance([in] HSTRING name, [out, retval] IWidget** result);

构造函数的参数是CreateInstance方法的参数,CreateInstance方法的输出是新创建的对象。

激活工厂提供的另一项内容是类的静态成员。静态成员位于通常命名为IWidgetStatics的接口上。例如,如果我们有一个静态方法FindByName

c++
runtimeclass Widget
{
    static Widget FindByName(String name);
}

IWidget­Statics接口将具有类似如下的方法:

c++
HRESULT IWidgetStatics::FindByName([in] HSTRING name, [out, retval] IWidget** result);

总之,激活工厂是一个放置类中可执行的所有非实例成员操作的地方。它是表示类本身的对象,而不是类的任何实例。

额外的闲聊:如果你将构造函数视为“返回新构造对象的名为CreateInstance的静态方法”,那么你也可以将激活工厂视为放置所有静态成员的地方。