2 回答

TA贡献1829条经验 获得超6个赞
您可以尝试使用CallerMemberNameAttribute
class。
属性“允许您获取方法调用者的方法或属性名称。”
private ApiRequest CreateRequest(string endpoint, [CallerMemberName] string callerMemberName= "")
{
var methodInfo = this.GetType().GetMethod(callerMemberName);
var attributes = (RequiresAuthenticationAttribute)method.GetCustomAttributes(typeof(RequiresAuthenticationAttribute), true);
var request = new ApiRequest( endpoint );
if (attributes.Any())
SignRequest(request, _credentials);
return request;
}

TA贡献1789条经验 获得超8个赞
如果您开始使用属性,那么您将不得不以一种或另一种方式使用反射。一些反射机制比其他机制更快,但仍然存在运行时间损失,您必须为此付出代价。另一方面,如果您想要的是关注点分离(并且使用属性不是给定的),那么您可能需要考虑使用接口来分离这些关注点。
例如:
public interface IAuthenticated
{
public async Task<ApiResponse> GetPrivateData();
}
public interface IPublicAccess
{
public async Task<ApiResponse> GetPublicData();
}
public async Task<ApiResponse> IPublicAccess.GetPublicData()
{
var request = CreateRequest( "v1/public" );
return await _httpClient.GetAsync( request );
}
public async Task<ApiResponse> IAuthenticated.GetPrivateData()
{
var request = CreateRequest( "v1/private" );
return await _httpClient.GetAsync( request );
}
private ApiRequest CreateRequest( string endpoint )
{
var request = new ApiRequest( endpoint );
// if (caller has RequiresAuthenticationAttribute)
// SignRequest( request, _credentials );
return request;
}
- 2 回答
- 0 关注
- 95 浏览
添加回答
举报