实现插件/插件/插件策略的最佳实践

我的应用程序应该是可扩展的。 为了我自己的需要,我实施了一些服务。 这些服务基于IoC / DI原理。 因此,服务封装了应用程序的概念。

例如,有一个IApplicationService。 ApplicationService公开有关当前例外应用程序的信息。 指定了AssemblyInfo等。 另一个示例是INavigationService(请参阅示例中的mef.codeplexcom)。 此服务提供了一些属性,其中包含有关当前所选项目的信息以及某些事件。

我认为,“服务方法”是最简单的,并简化了应用程序的扩展点。 所以,我不确定这是否是最好的方法。 你怎么看? 你如何在像addins / addons / plugins这样的应用程序中实现“扩展点”?

提前感谢您的回复! 对不起,我的英语很差。 ;)

您熟悉MEF (托管扩展框架)吗?

Managed Extensibility Framework(简称MEF)简化了可扩展应用程序的创建。 MEF提供可用于加载应用程序扩展的发现和组合function。

您真的需要查看MEF – Managed Extensibility Framework。

  • 托管可扩展性框架概述
  • 使用托管扩展性框架在.NET 4中构建可组合应用程序
  • Codeplex上的MEF

这是一个很好的新框架,微软自己在Visual Studio 2010中使用它的可扩展性故事。 伟大且易于使用 – 为什么重新发明轮子,当你可以使用成千上万的开发人员将很快使用的东西?

是的,我熟悉MEF。 我也使用MEF的概念,但也存在一些缺点。 我的应用程序是IoC / DI,与MEF一起使用有点复杂。 MEF实际上不是DI容器,因此将MEF与其他DI容器(例如ninject,unity,……)一起使用很难实现。 我不会将MEF与其他DI容器一起使用。 因此将MEF与其他DI容器混合并不是很好。

我希望你能理解我的担忧。

添加:无法将扩展名加载到MEF中的AppDomain中。 所以这对我的需求并不好。 System.AddIn或MAF支持这个,但我不会使用System.AddIn,因为这非常重……