如何编写简单的Cake module?寻求最新文档与Hello World示例
极简Cake Module示例(Hello World级)
1. 项目结构
先创建一个.NET类库项目,结构如下:
Cake.HelloWorldModule/ ├── Cake.HelloWorldModule.csproj ├── HelloWorldModule.cs └── Properties/ └── AssemblyInfo.cs
2. 项目配置
在Cake.HelloWorldModule.csproj里添加Cake.Core的引用,用最新稳定版即可:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net6.0</TargetFramework> <AssemblyName>Cake.HelloWorldModule</AssemblyName> <PackageId>Cake.HelloWorldModule</PackageId> </PropertyGroup> <ItemGroup> <PackageReference Include="Cake.Core" Version="3.1.0" /> </ItemGroup> </Project>
3. 核心Module代码
这部分是Module的核心,实现IModule接口来注册自定义服务,再扩展Cake脚本可调用的方法:
using Cake.Core; using Cake.Core.Annotations; using Cake.Core.Composition; // 实现Cake的IModule接口,这是模块的入口 public class HelloWorldModule : IModule { public void Register(ICakeContainerRegistrar registrar) { // 注册自定义服务,这里用单例模式 registrar.RegisterType<HelloWorldProvider>().AsSelf().Singleton(); } } // 自定义服务类,封装业务逻辑 public class HelloWorldProvider { private readonly ICakeContext _context; public HelloWorldProvider(ICakeContext context) { _context = context; } public void SayHello() { // 调用Cake的日志输出 _context.Log.Information("Hello from custom Cake Module!"); } } // 给Cake脚本添加可直接调用的扩展方法 [CakeAliasCategory("HelloWorld")] public static class HelloWorldAliases { [CakeMethodAlias] public static void HelloWorld(this ICakeContext context) { // 从Cake的服务容器中获取自定义服务实例 var provider = context.Services.GetService<HelloWorldProvider>(); provider.SayHello(); } }
4. 打包与使用
- 编译项目,把生成的
Cake.HelloWorldModule.dll放到Cake项目的./tools/Modules/目录下(没有就新建) - 在你的Cake脚本(比如
build.cake)里调用自定义方法:
Task("Hello") .Does(() => { HelloWorld(); }); RunTarget("Hello");
运行Cake脚本后,就能看到日志输出Hello from custom Cake Module!
关于文档:目前Cake官方的Module文档确实不够详尽,不过你可以查看Cake核心源码里IModule和ICakeContainerRegistrar的注释,能快速理解模块的核心逻辑——本质就是通过依赖注入容器注册自定义服务、扩展方法,以此扩展Cake的功能。另外,也可以关注Cake官方仓库的docs目录,偶尔会有更新补充。
内容的提问来源于stack exchange,提问作者lonix
相关产品推荐
相关产品推荐

