首先添加接口类
public interface IAfterCheckBar
{
void AfterCheckBar(MainViewModel MainViewModel, ref string bar_str, ref ExtendArg arg, ref List<AssemFlowModel> flows);
}
插件可用于处理主逻辑以外的分支逻辑
程序初始化插件储存字典
string ExtendDllName = Path.Combine(PCSBase.GetCurrentPath(), "SHGXQRTV2Extend.dll");//定位扩展插件
Dictionary<string, IAfterRecvBarStr> AfterRecvBarStrExtendDict = new Dictionary<string, IAfterRecvBarStr> { };用于储存插件信息
遍历本地配置中配置的扩展名称来添加到程序中
var _AfterRecvStr = PCSAssemblyExtend.LoadIntface(ExtendDllName, typeof(IAfterRecvBarStr));
foreach (string i in setting.Extend.AfterRecvBarStrList)
{
if (!_AfterRecvStr.ContainsKey(i))
{
throw new Exception($"{QRTResource.ConfigError},{QRTResource.NotFound} AfterRecv - {QRTResource.ExtendedInterface}:'{i}'。{QRTResource.ContactAdministratorConfiguration}");
}
AfterRecvBarStrExtendDict.Add(i, (IAfterRecvBarStr)_AfterRecvStr[i]);
};
在主逻辑中插入扩展逻辑端。实现扩展逻辑分支
foreach (var after in setting.Extend.AfterRecvBarStrList)
{
try
{
AfterRecvBarStrExtendDict[after].AfterRecvBarStr(this, ref bar_str, ref arg);
}
catch (Exception exp)
{
NotifyShow($"{QRTResource.ExtendedInterface} {QRTResource.Exception}\n {QRTResource.InterfaceName}-AfterRecvBarStr:{after}");
log.WriteError($"{QRTResource.ExtendedInterface} {QRTResource.Exception} AfterRecvBarStr:\n{QRTResource.InterfaceName}:{after}\n{QRTResource.ExceptionMsg}:{exp.ToString()}");
arg.Cancel = true;
return;
}
if (arg.ExtendCancel) { return; }
}