2011-08-22 15 views
2

我正在创建某种插件系统。目前我使用WinForms应用程序来加载程序集,使用Assembly.LoadActivator.CreateInstance。 WinForms GUI应该只显示当前加载的程序集(插件)的名称。在服务器端运行连续的自定义应用程序逻辑。入口点?

库中存在一个类PluginManager,它实例化并保存了所有实现者的列表。

但是,我现在想要从Silverlight应用程序访问插件列表(仅限它们的名称)。

我有一个在Visual Studio中创建的Silverlight 4应用程序。

这增加了两个项目:

  • MyProject(SL 4项目)
  • MyProject.Web(含其运行.xap文件在.aspx启动页)

我需要的是PluginManager及其实例化的插件不仅在Silverlight页面请求期间(通过aspx页面)加载,而且始终加载,即使用户从不在浏览器中打开Silverlight应用程序。我对这个.Web项目的入口点感到困惑。 (在控制台应用程序中,我会将代码放入Main方法中,在Loaded事件处理程序的WinForms中,但我不知道该.Web项目中的“服务”在哪里启动)。

这是如何工作的?我应该在哪里实例化我的PluginManager.Web项目仅在HTTP请求期间短暂运行,还是可以连续运行?

+0

网站或Web应用程序? –

+0

它是作为一个Silverlight商业应用项目模板制作的,所以VS生成了两个项目。所以我想这是一个应用程序。不知道,但。我如何检查? –

回答

0

将Global.asax添加到MyProject.Web。并在Application_Start()方法中执行此操作。 此方法在构建应用程序时仅调用一次。

如果您需要在构建应用程序之前运行PluginManager,则应该创建一个从您的安装程序运行的Windows服务。该服务将实例化PluginManager。

+0

你正在谈论一个Windows服务,对吧?然后什么是与Global.asax服务交谈的最佳方式。我不认为我完全理解这个架构。 –

+0

您可以在Application_Start()中创建PluginManager - 但只有在首次请求您的Web应用程序时,才会调用此方法一次。如果PluginManager应该在第一次请求之前实例化,例如,在安装应用程序之后立即可以创建自己的Windows服务。但我认为使用Global.asax的解决方案将为您拨款 –

+0

不,实际上我想我需要该服务,因为即使没有对页面进行任何请求,应用程序也应运行。现在我只需要找到一个正确的方式与SL应用程序中的Windows服务进行通信。 –

相关问题