整合了一个命令行程序的框架
背景
最近工作中写了N多个命令行程序跑数据.每新建一个项目就要引用各种包,各种配置.所以有了这个整合包.其实不能算是框架吧,没写什么代码,几乎就是引用一些包.
代码
GitHub: https://github.com/lun3322/Luna.Service
NuGet1: Install-Package Luna.Service
NuGet2: Install-Package Luna.Service.Nlog
- Luna.Service 代码几乎都在这个包里.Starter在程序启动的时候加载.主要功能是扫描程序集注册相关类型进IOC
- Luna.Service.Nlog 这里包含了我常用的nlog配置,和一个启动器
关于使用
- 如果你也使用nlog写日志的话可以直接引用 Luna.Service.Nlog 包.关于日志的一个配置会自动加载到项目中
- 设置NLog.config文件编译时复制到输出目录
- 在Main方法中新增代码
using (var starter = Starter.Create<Runner>()) { starter.Container.AddFacility<LoggingFacility>(f => f.LogUsing<NLogFactory>().WithConfig("NLog.config")); starter.Run(); }
- 增加你的service像下面这样
注意接口实现ILunaService才能被自动注册进IOCpublic interface IDemoService : ILunaService { string GetMessage(); } public class DemoService : LunaServiceBase, IDemoService { public string GetMessage() { Logger.Info("GetMessage"); return "测试"; } }
- 修改Runner类的run方法
public class Runner : LunaRunnerBase { private readonly IDemoService _demoService; public Runner(IDemoService demoService) { _demoService = demoService; } public override void Run() { var message = _demoService.GetMessage(); Logger.Info(message); Logger.Info("ok"); } }
如果不喜欢用nlog的话,可以查看Castle.Windsor文档修改第3步中AddFacility方法
项目约定: 你的程序命名必须遵循aaa.bb.c的方式
Demo.App <- 应用程序入口
Demo.Service <- 服务层
Demo.Entity <- 实体层