PluginFramework

其他类别 2025-08-04

.NET Core的插件框架

使用.NET Core的插件框架,所有内容都是插件!插件框架是用于.NET Core应用程序的插件平台,包括ASP.NET Core,Blazor,WPF,Windows Forms和Console应用程序。它轻巧且易于集成并支持多个不同的插件目录,包括.NET组件, Nuget软件包Roslyn脚本

主要功能

以下是插件框架的一些主要功能:

  • 一切都是插件!将插件作为Nuget包装,.NET组件,Roslyn脚本等提供。
  • 简单地集成到新的或现有的.NET核心应用程序中。
  • 自动依赖性管理。
  • 使用Nuget包装时处理平台特定的运行时DLL和本机DLL。
  • MIT许可,商业支持。

QuickStart:插件框架和ASP.NET Core

插件框架可从Nuget作为.NET Core 3.1软件包获得。有一个单独的软件包,可以使在ASP.NET Core App中使用插件更容易使用:

Install-Package Weikio. PluginFramework .AspNetCore

使用插件框架就像在Configureservices中添加单个新行一样容易:

services.Add PluginFramework (@".myplugins");

该代码从myplugins-folder中找到所有实现自定义ioperator-interface的插件(类型)。该插件可使用构造函数注入在控制器中:

public CalculatorController(IEnumerable operator)
{
	_operators = operators;
}

另外,您可以使用目录提供多个插件位置:

{ type.Implements(); }); var anotherPluginCatalog = new FolderPluginCatalog(@".morePlugins", type => { type.Implements(); }); services.AddPluginFramework() .AddPluginCatalog(folderPluginCatalog) .AddPluginCatalog(anotherPluginCatalog) .AddPluginType();">
var folderPluginCatalog = new FolderPluginCatalog(@".myplugins", type =>
{
    type.Implements();
});

var anotherPluginCatalog = new FolderPluginCatalog(@".morePlugins", type =>
{
    type.Implements();
});

services.Add PluginFramework ()
    .AddPluginCatalog(folderPluginCatalog)
    .AddPluginCatalog(anotherPluginCatalog)
    .AddPluginType();

样品

以下插件框架可从GitHub获得:

插件框架和.NET控制台应用程序

插件框架和ASP.NET核心

插件框架和大火

插件框架和WPF应用程序

插件框架和Winforms应用程序

Nuget和插件框架和ASP.NET Core

Roslyn&Plugin Framework&Asp.net Core

代表和插件框架和ASP.NET核心

标记和Winforms应用程序

AppSettings.JSON和ASP.NET核心

背景和介绍

有关与插件框架背景有关的更多详细信息,请参阅Infoq的以下介绍文章。

主要概念

使用插件框架集中在两个概念周围:插件插件目录

插件

插件是软件程序,可为应用程序提供扩展。插件旨在与单个应用程序一起使用。该应用通常称为主机应用程序。主机应用程序的设计方式使其可以动态地定位和运行插件运行时。没有插件的应用程序可以使用,没有主机应用程序,插件就无法正常工作。

主机应用程序定义了插件的规格。在某些应用中,插件可以在UI中添加新功能。在其他应用程序中,插件用于将日志分配到多个不同的系统中。主机应用程序定义了它支持哪种扩展。

基于插件的软件体系结构可以在以下方案中有所帮助:

  • 发行后为应用程序添加新功能
  • 将大型系统分为较小的部分
  • 在不重新启动的情况下更新始终的软件系统

插件是动态的,通常只有在应用程序需要时才会加载它们。插件通常不会作为系统的一部分编译,而是作为单独的软件包(组件,Nuget软件包)分发的。

在插件框架的上下文中,插件是单个.NET类型。是什么制造插件?如前所述,这取决于主机应用程序。对于某些应用程序,插件是实现特定接口的类型。在某些应用中,插件是一种具有单一公共方法的类型,称为Run。属性通常用于指示插件,并且插件框架也支持。从插件框架的角度来看,任何事物或其他所有内容都可以是插件。

如前所述,在插件框架中,单个插件是.NET类型。即使插件框架的ASP.NET核心支持使通过依赖注入(IserviceProvider)在服务和控制器中实例化和使用插件变得易于实例化,但插件框架本身并未提供任何内置机制来创建插件(类型)的实例(对象)。在某些情况下,Activator.CreateinStance就是所有需要的,在某些情况下,最好将插件框架与应用程序的DI系统相关联。要求特定于主机应用程序。

在插件框架中,每个插件都由以下信息组成:

  • 类型
  • 插件名称
  • 插件版本

插件目录

插件框架包含一个称为“目录”的概念。单个组件可以是目录。 .NET类型可以是目录。带有DLL的文件夹通常用作目录,插件框架还支持Nuget软件包,Nuget Feeds和Roslyn脚本作为插件目录。多个目录通常合并为单个复合目录。

每个目录包含0-N插件。

插件框架提供以下正式支持的目录:

  • 类型
  • 集会
  • 文件夹
  • 委托(行动或FUNC)(文档)
  • Roslyn脚本(Nuget:Weikio。Pluginframework.catalogs.roslyn,文档PluginFramework
  • Nuget软件包(Nuget:Weikio。Pluginframework.catalogs.nuget PluginFramework
  • nuget feed(nuget: PluginFramework )

源代码

插件框架的源代码可从GitHub获得。

支持和建造

插件框架由Adafy构建。 Adafy还为框架提供商业支持。

Adafy是芬兰软件开发公司,重点是Microsoft Technologies。

约束

多亏了以下帮助该项目的贡献者:

@panoukos41

执照

插件框架可作为开源,MIT许可的项目。

下载源码

通过命令行克隆项目:

git clone https://github.com/weikio/PluginFramework.git