我想为采用两种类型的泛型值的这种类型的方法创建泛型方法吗?
我不想制作用于审核的重载方法来执行相同的冗余工作。
public class UserProfile : IUserProfile
{
private static void GetAudit(ChangePasswordRequest changePasswordRequest, ChangePasswordResponse changePasswordResponse,
int memberId, RemoteEndpointMessageProperty endpointProperty)
{
string auditText = "ChangePassword Req:";
auditText += Util.Serialize(changePasswordRequest).ToString(CultureInfo.InvariantCulture);
auditText += "Res:";
auditText += Util.Serialize(changePasswordResponse).ToString(CultureInfo.InvariantCulture);
Audit.Add(AuditEventType.UpdatePassword, Severity.Normal, memberId,
changePasswordRequest.TokenId,
auditText,
endpointProperty.Address, changePasswordRequest.IpAddress);
}
private static void GetAudit(LoadSupplierRequest loadSupplierRequest, LoadSupplierResponse loadSupplierResponse,int memberID,
RemoteEndpointMessageProperty endpointProperty)
{
string auditText = "LoadSupplier Req:";
auditText += Util.Serialize(loadSupplierRequest).ToString(CultureInfo.InvariantCulture);
auditText += "Res:";
auditText += Util.Serialize(loadSupplierResponse).ToString(CultureInfo.InvariantCulture);
Audit.Add(AuditEventType.LoadSupplier, Severity.Normal, memberID, loadSupplierRequest.TokenId,
auditText,
endpointProperty.Address, loadSupplierRequest.IpAddress);
}
}
以下是类和接口的结构
public class ChangePasswordResponse : IResponse
{
/// <summary>
/// Gets or sets the status.
/// </summary>
/// <value>
/// The status.
/// </value>
[DataMember]
public ChangePasswordResponseStatus Status { get; set; }
/// <summary>
/// Gets or sets the error.
/// </summary>
/// <value>
/// The error.
/// </value>
[DataMember]
public Error Error { get; set; }
/// <summary>
/// Gets or sets the token identifier.
/// </summary>
/// <value>
/// The token identifier.
/// </value>
[DataMember]
public string TokenId { get; set; }
}
public interface IResponse
{
[DataMember]
Error Error { get; set; }
[DataMember]
string TokenId { get; set; }
}
public interface IRequest
{
/// <summary>
/// Gets or sets the ip address.
/// </summary>
/// <value>
/// The ip address.
/// </value>
[DataMember(IsRequired = true)]
string IpAddress { get; set; }
/// <summary>
/// Gets or sets the token identifier.
/// </summary>
/// <value>
/// The token identifier.
/// </value>
[DataMember(IsRequired = true)]
string TokenId { get; set; }
}
[Serializable]
public class ChangePasswordRequest : IRequest
{
/// <summary>
/// Gets or sets the old password.
/// </summary>
/// <value>
/// The old password.
/// </value>
[DataMember(IsRequired = true)]
public string OldPassword { get; set; }
/// <summary>
/// Gets or sets the new password.
/// </summary>
/// <value>
/// The new password.
/// </value>
[DataMember(IsRequired = true)]
public string NewPassword { get; set; }
/// <summary>
/// Gets or sets the ip address.
/// </summary>
/// <value>
/// The ip address.
/// </value>
[DataMember(IsRequired = true)]
public string IpAddress { get; set; }
/// <summary>
/// Gets or sets the token identifier.
/// </summary>
/// <value>
/// The token identifier.
/// </value>
[DataMember(IsRequired = true)]
public string TokenId { get; set; }
}
我这样做:
private static void LogNormalAudit<TRequest, TResponse>(TRequest request, TResponse response,
IRequest objRequest, int memberId, AuditEventType eventType)
{
bool isNormalSeverityOn = Convert.ToBoolean(ConfigurationSystem.SharedApiConfig["normal"]);
if (!isNormalSeverityOn) return;
var auditText = string.Format("Req: {0} |Rsp: {1}", Util.Serialize(request), Util.Serialize(response));
Audit.Add(eventType, Severity.Normal, memberId, objRequest.TokenId, auditText, GetClientIp(),
objRequest.IpAddress);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句