当类未知时使用泛型类型的反射



我正在加载一个带有反射的模型:

private void LoadAssemblies()
{
Assembly assembly = Assembly.LoadFrom(modelDll);
var types = assembly.GetTypes();
inputType = assembly.GetType(types.Where(x => x.FullName.Contains("Input")).FirstOrDefault().FullName);
outputType = assembly.GetType(types.Where(x => x.FullName.Contains("Output")).FirstOrDefault().FullName);
inputModel = Activator.CreateInstance(inputType);
outputModel = Activator.CreateInstance(outputType);
inputModel = JsonConvert.DeserializeObject(jsonPredict);
}

然后我需要调用一个具有两个泛型类型的方法

// I can't convert this model loaded at runtime into a type to this generic method
var predEngine = mlContext.Model.CreatePredictionEngine<typeof(inputModel), typeof(outputModel)>(mlModel); 

我试过了

var instance = Activator.CreateInstance(typeof(ModelOperationsCatalog)); 
/* I get an error:
System.MissingMethodException: 'No parameterless constructor defined for this object.'
instance.GetType()
.GetMethod("CreatePredictionEngine")
.MakeGenericMethod(inputType, outputType)
.Invoke(this, new object[] { });
*/

创建上下文

var mlContext = new MLContext();

获取模型

var model = mlContext.Model;

然后在它上面调用泛型方法,向其传递实例和参数:

typeof(ModelOperationsCatalog)
.GetMethod("CreatePredictionEngine")
.MakeGenericMethod(inputType, outputType)
.Invoke(instance, new object[] { param1, param2 });*/

最新更新