.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 <IOperator>(@\".\\myplugins\");
该代码从myplugins-folder中找到所有实现自定义ioperator-interface的插件(类型)。该插件可使用构造函数注入在控制器中:
public CalculatorController(IEnumerable<IOperator> operator)
{
_operators = operators;
}
另外,您可以使用目录提供多个插件位置:
PluginFramework()
.AddPluginCatalog(folderPluginCatalog)
.AddPluginCatalog(anotherPluginCatalog)
.AddPluginType<IOperator>();\”>
var folderPluginCatalog = new FolderPluginCatalog(@\".\\myplugins\", type =>
{
type.Implements<IOperator>();
});
var anotherPluginCatalog = new FolderPluginCatalog(@\".\\morePlugins\", type =>
{
type.Implements<IOperator>();
});
services.Add PluginFramework ()
.AddPluginCatalog(folderPluginCatalog)
.AddPluginCatalog(anotherPluginCatalog)
.AddPluginType<IOperator>();
样品
以下插件框架可从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许可的项目。
