如何使用反射按字符串名称调用 API?
How to use reflection to call a API by string name?
如何通过字符串名称调用另一个 AppService 中的 API?
示例:我在 MyAppService
中有一个 API,如下所示
public class MyAppService : MyAppServiceBase, IMyAppService
{
private readonly IRepository<MyEntity> _myEntityRepository;
public CommonLookupAppService(IRepository<MyEntity> myEntityRepository)
{
_myEntityRepository = myEntityRepository;
}
public async Task<MyOutput> MyMethod (MyInput input)
{
}
}
如何将MyMethod
作为字符串保存到数据库中并在另一个应用程序服务中调用它?我有很多这样的方法,所以我不想使用 switch case
来调用它们。我想将此方法程序集名称作为字符串保存到数据库中,并在需要时调用它。我该怎么办?
您可以组合使用:
Type.GetType(string)
Type.GetMethod(string)
IIocResolver.ResolveAsDisposable(Type)
— 根据 ABP
MethodInfo.Invoke(Object, Object[])
// var appServiceName = "MyAppService";
// var methodName = "MyMethod";
// var input = new object[] { new MyInput() };
var appServiceType = Type.GetType(appServiceName);
var method = appServiceType.GetMethod(methodName);
using (var appService = IocResolver.ResolveAsDisposable(appServiceType))
{
var output = await (Task)method.Invoke(appService.Object, input);
}
如何通过字符串名称调用另一个 AppService 中的 API?
示例:我在 MyAppService
中有一个 API,如下所示public class MyAppService : MyAppServiceBase, IMyAppService
{
private readonly IRepository<MyEntity> _myEntityRepository;
public CommonLookupAppService(IRepository<MyEntity> myEntityRepository)
{
_myEntityRepository = myEntityRepository;
}
public async Task<MyOutput> MyMethod (MyInput input)
{
}
}
如何将MyMethod
作为字符串保存到数据库中并在另一个应用程序服务中调用它?我有很多这样的方法,所以我不想使用 switch case
来调用它们。我想将此方法程序集名称作为字符串保存到数据库中,并在需要时调用它。我该怎么办?
您可以组合使用:
Type.GetType(string)
Type.GetMethod(string)
IIocResolver.ResolveAsDisposable(Type)
— 根据 ABPMethodInfo.Invoke(Object, Object[])
// var appServiceName = "MyAppService";
// var methodName = "MyMethod";
// var input = new object[] { new MyInput() };
var appServiceType = Type.GetType(appServiceName);
var method = appServiceType.GetMethod(methodName);
using (var appService = IocResolver.ResolveAsDisposable(appServiceType))
{
var output = await (Task)method.Invoke(appService.Object, input);
}