跳到主要内容

1.域的概念与使用

开始

引用包 DotNetCore.Natasha.DomainDotNetCore.Natasha.CSharp.Compiler.Domain;

DotNetCore.Natasha.Domain 为 域 的实现包。 DotNetCore.Natasha.CSharp.Compiler.Domain 为 Natasha 编译单元与 域的粘合包。

创建域

//如果你想将主域转化为 NatashaDomain,请使用不带参数的初始化方法,并创建后将实例保存起来,不要重复创建。
var domain = new NatashaDomain();
//如果你想创建非主域
var domain = new NatashaDomain(key);

加载插件

在这之前我不得不说,一个插件如何输出完整依赖,如何屏蔽引用接口,请参照微软文档

插件加载

LoadPlugin 方法允许用户传入插件文件路径,返回程序集。

程序集比较器

Natasha.Domain 自实现了程序集比较逻辑,通过 SetAssemblyLoadBehavior(AssemblyCompareInfomation loadBehavior) 方法来指定程序集依赖加载行为,例如 "AssemblyCompareInfomation.UseHighVersion" 枚举传入,将导致插件加载过程中,插件所依赖的程序集与共享域已存在的程序集进行比较,如果程序集名相同,则加载版本较高的程序集。

封装 API

Natasha.Domain 合并了插件加载方法和程序集比较器产生了 4 个 API 方法,LoadPluginWithHighDependency / LoadPluginWithLowDependency / LoadPluginUseDefaultDependency / LoadPluginWithAllDependency. 就拿第一个 API 来说,如果比对过程中找到的依赖版本有高有低,则选择高版本的依赖,而非加载低版本依赖,在使用过程中记得看注释,有问题要去 Github 提问。

注意事项

ALC 不允许加载引用程序集,因为引用程序集不可执行。