如何在.NET 6控制台应用中使用Lamar依赖注入容器?
.NET 6控制台应用中使用Lamar实现任务运行器
1. 准备项目并安装Lamar
创建.NET 6控制台项目后,通过NuGet安装Lamar包:
dotnet add package Lamar
2. 定义任务接口
声明所有任务必须实现的统一接口,确保执行入口一致:
public interface ITask { void Run(); }
3. 编写具体任务类
实现示例任务类,这里以两个任务为例:
public class SampleTask : ITask { public void Run() { Console.WriteLine("SampleTask 正在执行..."); } } public class DataSyncTask : ITask { public void Run() { Console.WriteLine("DataSyncTask 正在执行数据同步操作..."); } }
4. 配置Lamar容器并注册任务
在Program.cs中构建Lamar容器,通过扫描程序集自动注册所有ITask实现,新增任务无需手动修改注册逻辑:
using Lamar; using System.Reflection; // 初始化Lamar容器 var container = new Container(config => { // 扫描当前程序集,自动注册所有实现ITask的类型 config.Scan(scanner => { scanner.Assembly(Assembly.GetExecutingAssembly()); scanner.AddAllTypesOf<ITask>(); }); });
5. 处理命令行参数并执行任务
读取命令行传入的类名,从容器中获取对应任务实例并执行,同时增加异常处理:
// 获取命令行参数 var args = Environment.GetCommandLineArgs(); if (args.Length < 2) { Console.WriteLine("请传入要执行的任务类名称"); return; } var targetTaskName = args[1]; try { // 根据类名查找对应的任务类型 var taskType = Assembly.GetExecutingAssembly().GetTypes() .FirstOrDefault(t => t.Name.Equals(targetTaskName, StringComparison.OrdinalIgnoreCase)); if (taskType == null) { Console.WriteLine($"未找到指定任务类: {targetTaskName}"); return; } // 从容器解析实例并执行Run方法 var task = (ITask)container.GetInstance(taskType); task.Run(); } catch (Exception ex) { Console.WriteLine($"任务执行失败: {ex.Message}"); }
测试运行
比如要执行SampleTask,在命令行输入:
dotnet run SampleTask
即可看到对应的任务执行输出。
内容的提问来源于stack exchange,提问作者geoff swartz
相关产品推荐
相关产品推荐

