1、 首先获取所有有修饰符修饰的类型方法
private void AddTypeDic()
{
//方法(该方法调用当前正在执行的方法)的 Assembly 对象
var assembly = Assembly.GetCallingAssembly();
foreach (var item in assembly.GetTypes())
{
if (!(item.BaseType == typeof(FaceRecoServer))
|| item.IsAbstract)
continue;
//返回有使用VendarAttribute修饰的方法
var attr = item.GetCustomAttributes(false).OfType<VendarAttribute>().FirstOrDefault();
if (attr != null)
{
vendarDic.Add(attr.Vendar, item);
}
}
}
2、 传进修饰符参数,确定构建哪类实例
private FaceRecoServer GetInstance(FRS_ServerInfo fRS_ServerInfo)
{
//是否包含该厂商 用修饰符查找
var vendar = SystemUtils.GetEnumDescription(fRS_ServerInfo.Vender);
if (!vendarDic.ContainsKey(vendar))
{
Logger.Error($"GetInstance failed, vendarDic doesn't contain key {vendar}");
return null;
}
//使用与指定参数匹配程度最高的构造函数创建指定类型的实例,第一个参数为要构建的实例类型,第二个参数为实参
return (FaceRecoServer)Activator.CreateInstance(vendarDic[vendar], fRS_ServerInfo);
}