Как использовать отражение для вызова API по имени строки?
Как вызвать API в другом AppService по имени строки?
Пример: у меня есть API, как показано ниже в MyAppService
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
позвонить им. Я хочу сохранить имя сборки этого метода в базе данных в виде строки и вызывать его при необходимости. Что я должен делать?
1 ответ
Решение
Вы можете использовать комбинацию из:
Type.GetType(string)
Type.GetMethod(string)
IIocResolver.ResolveAsDisposable(Type)
- по АД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);
}