[When(@"Execute Request with model ""(.*)""")]
public void WhenExecuteRequestWithModel(string className)
{
switch (className)
{
case "Customer":
if (_settings.Request.Method == Method.GET)
_settings.Response = _settings.RestClient.Execute<Customer>(_settings.Request);
else
_settings.Response = _settings.RestClient.ExecuteAsyncRequest<Customer>(_settings.Request).GetAwaiter().GetResult();
break;
case "CustomerStatus":
if (_settings.Request.Method == Method.GET)
_settings.Response = _settings.RestClient.Execute<CustomerStatus>(_settings.Request);
else
_settings.Response = _settings.RestClient.ExecuteAsyncRequest<CustomerStatus>(_settings.Request).GetAwaiter().GetResult();
break;
}
}
请帮助
className
是类的全名,或者如果您能够推断出类的全名(例如,通过在名称空间前添加名称),则应该能够使用Reflection实例化适当的泛型方法。 但是,坦率地说,您最好坚持使用switch
语句。无论哪种方式,您都应该能够通过创建一个辅助方法来减少重复代码。
switch (className)
{
case "Customer":
ExecuteRestMethod<Customer>()
break;
case "CustomerStatus":
ExecuteRestMethod<CustomerStatus>();
break;
}
public void ExecuteRestMethod<T>()
{
if (_settings.Request.Method == Method.GET)
_settings.Response = _settings.RestClient.Execute<T>(_settings.Request);
else
_settings.Response = _settings.RestClient.ExecuteAsyncRequest<T>(_settings.Request).GetAwaiter().GetResult();
}