如何使用实现相同接口的多个包中的正确包?
How to use correct bundle from several bundles implementing same interface?
我在将应用程序拆分为模块时遇到问题。我发现了 OSGi,但我不确定它是否能解决我的问题。
假设我有核心网络应用程序。此应用程序显示 table 中的仪表板列表(列 "Owner name"、"description"、"date created")。当我点击列表上的仪表板时,我被重定向到仪表板屏幕。
现在事情变得复杂了。这些仪表板可以是不同类型(CompanyDashboards、PersonalDashboards 等)。这些类型应该是可选模块(具体取决于实施时可能只有一种类型或两种或多种类型)。
现在:
我有我的应用程序的核心,我想在不知道它的类型的情况下创建仪表板列表。假设我有一些仪表板界面。我使用 Dashboard.getName、Dashboard.getDescription、Dashboard.onClick 等。我不希望核心知道连接的包。现在,当单击仪表板时,它应该加载并显示正确类型的仪表板(CompanyDashboard 或 PersonalDashboard)。
如何在核心不知道可用类型的情况下加载正确的。 OSGi 是正确的工具吗?
您可以为此使用 OSGi 服务。您在其自己的包中创建一个通用的 DashBoard 界面。然后您可以拥有多个捆绑包,每个捆绑包提供一个仪表板。在这些包中的每一个中,您都创建 DashBoard 实例并使用公共接口发布它。
然后你有一个包实现了 DashBoard 列表的中央视图。在此捆绑包中,您将监听 DashBoard 类型的所有服务并列出它们。
所以诀窍是不要实例化中央包中的各个实例。
我在将应用程序拆分为模块时遇到问题。我发现了 OSGi,但我不确定它是否能解决我的问题。
假设我有核心网络应用程序。此应用程序显示 table 中的仪表板列表(列 "Owner name"、"description"、"date created")。当我点击列表上的仪表板时,我被重定向到仪表板屏幕。
现在事情变得复杂了。这些仪表板可以是不同类型(CompanyDashboards、PersonalDashboards 等)。这些类型应该是可选模块(具体取决于实施时可能只有一种类型或两种或多种类型)。
现在: 我有我的应用程序的核心,我想在不知道它的类型的情况下创建仪表板列表。假设我有一些仪表板界面。我使用 Dashboard.getName、Dashboard.getDescription、Dashboard.onClick 等。我不希望核心知道连接的包。现在,当单击仪表板时,它应该加载并显示正确类型的仪表板(CompanyDashboard 或 PersonalDashboard)。
如何在核心不知道可用类型的情况下加载正确的。 OSGi 是正确的工具吗?
您可以为此使用 OSGi 服务。您在其自己的包中创建一个通用的 DashBoard 界面。然后您可以拥有多个捆绑包,每个捆绑包提供一个仪表板。在这些包中的每一个中,您都创建 DashBoard 实例并使用公共接口发布它。 然后你有一个包实现了 DashBoard 列表的中央视图。在此捆绑包中,您将监听 DashBoard 类型的所有服务并列出它们。
所以诀窍是不要实例化中央包中的各个实例。