Pluggable architecture

问题描述 投票:0回答:1

我正在对一个大型Web项目进行重构/重组。该网站将包括可以在每个实现上安装或不安装的几个不同模块,以及一些客户特定模块。因此,我需要使用可插拔的体系结构。

[我们管理核心产品的解决方案以及每个客户的解决方案时,我认为最好的选择是构建一个非常简单且尽可能空的Web项目(WebHost),将其包含在每个解决方案中加载相应的模块。在核心产品解决方案中,这将是标准模块,在客户解决方案中,这将是核心产品和客户模块中的已编译(dll +静态内容)模块。

此外,该公司还有几种产品,以后可能以类似的方式进行重构。因此,如果我可以完全独立于每个项目来创建此WebHost,那就太好了。它不应具有任何特定于产品的参考,并且只能加载未知的Web模块。

经过一些研究,我认为最好的方法是MEF。有很多关于如何使用ASP.NET MVC + MEF的SO文章和文章。我开始按照SO this post创建PoC。我无法使其正常运行(see this post)。但是,在尝试使其工作时,我开始感觉到也许由于以下原因,这不是可行的方法:

  • 我无法获得非常基本的示例。
  • 我(作为一种解决方法,必须向WebHost项目添加一些特定于模块的设置才能使其正常运行(请参阅我的其他已链接文章)。
  • 我在网上进行了与该主题相关的几次搜索,还发现了一些有关MEF中内存泄漏错误的信息。

我不喜欢使用MEF或其他任何东西,因此,我想听听您对这种情况的建议。这里是我需要的摘要:

  • 模块化架构。如果可以使用.NET Framework会更好,但是如果使用.NET Core可以。
  • 我想避免在客户解决方案中使用核心项目和模块的来源。
  • 一些能够轻松运行和调试模块的方案。即使加载了编译的版本(在开发人员可以访问源代码的情况下)。
  • 以某种方式处理不同模块运行所需的配置。
  • [如果可能,WebHost应该可用于其他产品。
asp.net asp.net-mvc mef modular-design
1个回答
0
投票

按照@ Adriani6 => microservices是最好的主意。

但是,如果您继续不使用微服务,那么-

  1. 如果要使用MEF。请参阅github项目。

  2. 您可以使用便携式区域的概念。请参阅github项目。

  3. 您可以使用用户资料或团结而不是MEF。

请记住所有项目都是测试和初始项目。如果要用作实时项目时需要大量修改。

© www.soinside.com 2019 - 2024. All rights reserved.