Как использовать отражение для вызова 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);
}
Другие вопросы по тегам