托管可扩展性框架

时间:2011-03-04 20:22:43

标签: c# service mef

我正在为我的组织创建一个服务,该服务将安装在数百台计算机上。它的实施可能需要随着时间的推移而改变。在观看并阅读了一些关于MEF之后,我仍然有点失落。如果我想将一个dll放入服务文件夹并让该服务获取更改,那么MEF是一个很好的解释吗?

5 个答案:

答案 0 :(得分:3)

我和MEF做了很多相关的事。是的,MEF会做你想要的,但需要注意......

  • 可以在运行时
  • 发现并加载新的DLL
  • 但是,它会加载到与主应用程序相同的App域中,
  • 无法卸载或更改DLL而不重新启动应用程序

如果最后一点是个问题,请考虑MAF(尽管它更重)。但在MAF中,它会将您的扩展程序加载到一个单独的应用程序域中。

您的另一个选择就是生成另一个进程来处理请求,并将命令行参数传递给它。

答案 1 :(得分:1)

如果您使用的是VS2010,我建议您先尝试点击一次。它为您提供了setup.exe,但也为您提供了一个HTML文件(和其他文件),您可以将其上传到IIS服务器或FTP站点,甚至可以上传到本地网络上的共享文件夹。问题是,在配置部署时,您可以告诉安装程序直接从站点(HTML文件,ftp或lan共享文件夹)自动更新所有客户端。当用户启动应用程序时,它将连接到站点并要求更新(如果存在),如果存在,则应用程序将自行更新。如果要部署更新,则只需再次上载HTML文件和文件夹中的所有其他文件。

查看以下链接:

http://msdn.microsoft.com/en-us/library/ms953320.aspx

http://weblogs.asp.net/shahar/archive/2008/01/29/how-to-use-clickonce-to-deploy-your-applications.aspx

快乐的编码;)

答案 2 :(得分:0)

如果您将服务逻辑放在一个单独的类库中,并且在另一个类库中获得了所需的契约接口,我认为您可以这样做。然后,您可以创建目录编目并使用MEF导入服务实现(您只需要引用合同接口程序集)。然后,如果更改,您可以选择新的dll / service实现。您只需要一个目录观察器(FileSystemWatcher),然后您必须在目录观察器触发时调用目录的刷新方法。理论上它应该有用,但这只是一个想法。 :)无论如何,希望这有帮助。

答案 3 :(得分:0)

我不是MEF的专家。文档说Mef就是制作基于插件的系统。所以你的系统需要一些接口和MEF使得易于导入的类实现了这些接口到你的系统。你的情况似乎适合这个。 MEF具有目录编目,通过使用目录,您可以导入类型/ dll运行时。

How do I get a MEF Directory catalog looking at the same directory for both the Servicelayer and DAL?

答案 4 :(得分:0)

您还可以查看Prism。根据我的理解,它们是两个不同的框架,可以做同样的事情。 Prism允许您通过在实现IModule接口的dll中创建类来创建模块。您可以像在MEF中一样将dll拖放到文件夹中。您可以静态或动态加载模块,并执行一些我甚至不知道的其他事情。

Prism还有其他功能捆绑在一起,即Unity依赖注入容器(我喜欢称之为“魔法黑盒子”),一个简洁的事件和命令系统等等。我确信MEF有所有这些东西太