夜雨聆风学习资料网

ARTICLE · 1202806

[NL源码精读] DriverAttribute + DriverFac

[NL源码精读] DriverAttribute + DriverFac

以前加个协议就得改平台代码,NewLife.IoT 偏把驱动做成插件。写完类往目录一丢,重启就能用。

整套机制就靠几个小东西撑着。DriverAttribute 只有 11 行,拿一个字符串标记驱动名。DriverFactory 117 行,管注册、创建和扫描。它用三张线程安全字典分工:一张存类型,一张存带标识的实例,一张缓存参数模板。

真正妙的是启动时的 ScanAll。它会主动 new 出驱动实例,让对方自报参数模板和物模型。用户啥元数据都不用写,扫描器全给收齐了。要是某个驱动挂了,空的 catch 块直接吞掉异常,不影响别的继续注册。

用户继承泛型基类后,连节点都不用自己 new。想支持设备自动发现,再实现个单方法接口就行。调用方探测到能力就用,找不到就静默降级。

说白了,这套插件体系没引入复杂的 DI 容器。全靠特性标记、字典缓存和反射扫描,两百行代码就把扩展点搭稳了。

原文[NL源码精读] DriverAttribute + DriverFactory:C# 插件体系的教科书实现
广东,3小时前,

相关学习资料