思考一种好的架构(十二)
程序集扫描库(ReferenceScan)
是什么?
服务间会有各种相互依赖和引用,这势必会造成争夺ConfigureServices,到最后牵一发而动全身。于是很自然的出现了它来解决这个问题,
为什么?
为了解决服务争夺ConfigureServices注册顺序而诞生的库,他就是各个服务的带头人,一定是它最先注册
怎么做?
没有任何引用,非常简单
/// <summary> /// 扫描执行接口 /// 扫描后将会执行Execute函数 /// </summary> public abstract class BaseStartExecute { public BaseStartExecute() { } /// <summary> /// 执行函数 /// </summary> public abstract void Execute(); }
这就是前几节看到的BaseStartExecute
public class Scan { public static void QueryAssemblies<T>() where T : BaseStartExecute { List<T> StartExecutes = new List<T>(); var referenceScanDoMainName = typeof(Scan).Assembly.FullName; foreach (var item in System.AppDomain.CurrentDomain.GetAssemblies()) { if (item.GetReferencedAssemblies().Where(x => x.FullName.Equals(referenceScanDoMainName)).Count() > 0) { StartExecutes.AddRange(CreateAllInstancesOf<T>(item)); } } foreach (var item in StartExecutes) { item.Execute(); } } public static void QueryAssemblies() { List<BaseStartExecute> StartExecutes = new List<BaseStartExecute>(); var referenceScanDoMainName = typeof(Scan).Assembly.FullName; foreach (var item in System.AppDomain.CurrentDomain.GetAssemblies()) { if (item.GetReferencedAssemblies().Where(x => x.FullName.Equals(referenceScanDoMainName)).Count() > 0) { StartExecutes.AddRange(CreateAllInstancesOf<BaseStartExecute>(item)); } } foreach (var item in StartExecutes) { item.Execute(); } } public static IEnumerable<T> CreateAllInstancesOf<T>(Assembly assembly) { return assembly.GetTypes() //获取当前类库下所有类型 .Where(t => typeof(T).IsAssignableFrom(t)) //获取间接或直接继承t的所有类型 .Where(t => !t.IsAbstract && t.IsClass) //获取非抽象类 排除接口继承 .Select(t => (T)Activator.CreateInstance(t)); //创造实例,并返回结果(项目需求,可删除) } }
很简单的功能,扫描所有程序集并判断有没有引用ReferenceScan,因为BaseStartExecute在这,所以服务如果想要快人一步必须会要引用ReferenceScan,
然后实例化并执行Execute功能
它在这
很简单的服务
----
第一部分就到此结束了
很简单的介绍了下用包来作为为服务划分的SOA架构
后续将会有
1、快速生成基础设施服务、业务服务、并包含单元测试,不再需要手动创建
2、nuget的快速交付(CD),也就是推代码后自动更新版本,自动发布到仓库
3、APIDoc.Swagger的支持
4、有状态的服务
5、异常处理服务
6、操作日志
7、...
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!