Difference between revisions of "Zh/Documentation/DevGuide/ProUNO/Service Manager"
m |
m |
||
Line 1: | Line 1: | ||
− | {{Documentation/DevGuide/ProUNOTOC | + | {{Documentation/DevGuide/ProUNOTOC/Zh |
|ProUNO2b=block | |ProUNO2b=block | ||
|ProUNO2bSMCC=block | |ProUNO2bSMCC=block | ||
|ShowPrevNext=block | |ShowPrevNext=block | ||
− | |PrevPage=Documentation/DevGuide/ProUNO/Service Manager and Component Context | + | |PrevPage=Zh/Documentation/DevGuide/ProUNO/Service Manager and Component Context |
− | |NextPage=Documentation/DevGuide/ProUNO/Component Context | + | |NextPage=Zh/Documentation/DevGuide/ProUNO/Component Context |
}} | }} | ||
[[en:Documentation/DevGuide/ProUNO/Service Manager]] | [[en:Documentation/DevGuide/ProUNO/Service Manager]] |
Revision as of 01:59, 27 June 2008
com.sun.star.lang.ServiceManager 是每个 UNO 应用程序中的主要工厂。它按服务名称实例化服务,以枚举某项具体服务的所有实现,并在运行时添加或删除某项具体服务的工厂。实例化时,服务管理器被传送到每个 UNO 组件。
XMultiServiceFactory 接口
服务管理器的主要接口是 com.sun.star.lang.XMultiServiceFactory 接口。它提供三个方法:createInstance()
、createInstanceWithArguments()
和 getAvailableServiceNames()
。
interface XMultiServiceFactory: com::sun::star::uno::XInterface { com::sun::star::uno::XInterface createInstance( [in] string aServiceSpecifier ) raises( com::sun::star::uno::Exception ); com::sun::star::uno::XInterface createInstanceWithArguments( [in] string ServiceSpecifier, [in] sequence<any> Arguments ) raises( com::sun::star::uno::Exception ); sequence<string> getAvailableServiceNames(); };
-
createInstance()
返回一个默认构造的服务实例。返回的服务保证至少支持所有接口,这些接口是通过请求的服务名称来指定的。现在,可以从返回的XInterface
引用中查询服务说明中指定的接口。
- 使用服务名称时,调用程序不会对实例化哪个具体实现产生任何影响。如果某项服务存在多个实现,服务管理器就可以自由决定采用哪个实现。这一般不会对调用程序产生影响,因为每个实现都确实履行服务合同。性能或其他细节可能会有所不同。因此,也可以传送实现名称 ,而不是服务名称;但是,不建议这样做,因为实现名称可能会更改。
- 如果服务管理器没有为某个请求提供实现,将会返回一个空引用,因此必须进行检查。实例化时,可能会抛出所有 UNO 异常。有些可能会在要实例化的服务的规范中说明,例如,由于具体实现的配置不正确。另一个原因可能是缺少某个具体桥,例如,Java-C++ 桥,以防从 C++ 代码实例化 Java 组件。
-
createInstanceWithArguments()
使用附加参数实例化服务。一项服务表示在通过支持 com.sun.star.lang.XInitialization 接口进行实例化时需要参数。服务定义应该说明序列中每个元素的意义。可能有些服务必须使用参数来实例化。
-
getAvailableServiceNames()
返回服务管理器确实支持的所有服务名称。
XContentEnumerationAccess 接口
com.sun.star.container.XContentEnumerationAccess 接口允许创建具体服务名称的所有实现的枚举。
interface XContentEnumerationAccess: com::sun::star::uno::XInterface { com::sun::star::container::XEnumeration createContentEnumeration( [in] string aServiceName ); sequence<string> getAvailableServiceNames(); };
createContentEnumeration() 方法返回一个 com.sun.star.container.XEnumeration 接口。请 注意,如果枚举为空,此方法可能会返回空引用。 方法返回一个 com.sun.star.container.XEnumeration 接口。请注意,如果枚举为空,此方法可能会返回空引用。
interface XEnumeration: com::sun::star::uno::XInterface { boolean hasMoreElements(); any nextElement() raises( com::sun::star::container::NoSuchElementException, com::sun::star::lang::WrappedTargetException ); };
在上面的示例中,方法 Xenumeration.nextElement()
返回的 any 中,包含一个与此特定服务的每个实现对应的 com.sun.star.lang.XSingleServiceFactory 接口。例如,您可以遍历某项具体服务的所有实现,并检查附加的已实现服务的每个实现。XSingleServiceFactory
接口就提供这样的方法。利用此方法,您可以实例化一个服务丰富的功能实现。
XSet 接口
com.sun.star.container.XSet 接口允许在运行时将 com.sun.star.lang.XSingleServiceFactory 或 com.sun.star.lang.XSingleComponentFactory 实现插入到服务管理器或从中删除而不保存这些更改。办公软件应用程序终止时,所有更改将失效。对象还必须支持 com.sun.star.lang.XServiceInfo 接口,用于提供有关组件实现的实现名称和所支持服务的信息。
在开发阶段可能会对此功能可能特别感兴趣。例如,您可以连接到正在运行的办公软件,在服务管理器中插入新的工厂,以及在不需要提前注册的情况下直接实例化新服务。
编写 UNO 组件 - 组件的部署选项 - 特殊服务管理器配置 一节中给出了一个示例,说明如何将工厂插入到服务管理器中。
Content on this page is licensed under the Public Documentation License (PDL). |