1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
|
//------------------------------------------------------------------------------
// <copyright file="DbConnectionPoolAuthenticationContextKey.cs" company="Microsoft">
// Copyright (c) Microsoft Corporation. All rights reserved.
// </copyright>
// <owner current="true" primary="true">harsudan</owner>
// <owner current="true" primary="false">yuronhe</owner>
//------------------------------------------------------------------------------
using System;
using System.Diagnostics;
namespace System.Data.ProviderBase
{
/// <summary>
/// Represents the key of dbConnectionPoolAuthenticationContext.
/// All data members should be immutable and so, hashCode is pre-computed.
/// </summary>
sealed internal class DbConnectionPoolAuthenticationContextKey
{
/// <summary>
/// Security Token Service Authority.
/// </summary>
private readonly string _stsAuthority;
/// <summary>
/// Service Principal Name.
/// </summary>
private readonly string _servicePrincipalName;
/// <summary>
/// Pre-Computed Hash Code.
/// </summary>
private readonly int _hashCode;
internal string StsAuthority {
get {
return _stsAuthority;
}
}
internal string ServicePrincipalName {
get {
return _servicePrincipalName;
}
}
/// <summary>
/// Constructor for the type.
/// </summary>
/// <param name="stsAuthority">Token Endpoint URL</param>
/// <param name="servicePrincipalName">SPN representing the SQL service in an active directory.</param>
internal DbConnectionPoolAuthenticationContextKey(string stsAuthority, string servicePrincipalName) {
Debug.Assert(!string.IsNullOrWhiteSpace(stsAuthority));
Debug.Assert(!string.IsNullOrWhiteSpace(servicePrincipalName));
_stsAuthority = stsAuthority;
_servicePrincipalName = servicePrincipalName;
// Pre-compute hash since data members are not going to change.
_hashCode = ComputeHashCode();
}
/// <summary>
/// Override the default Equals implementation.
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public override bool Equals(object obj) {
if (obj == null) {
return false;
}
DbConnectionPoolAuthenticationContextKey otherKey = obj as DbConnectionPoolAuthenticationContextKey;
if (otherKey == null) {
return false;
}
return (String.Equals(StsAuthority, otherKey.StsAuthority, StringComparison.InvariantCultureIgnoreCase)
&& String.Equals(ServicePrincipalName, otherKey.ServicePrincipalName, StringComparison.InvariantCultureIgnoreCase));
}
/// <summary>
/// Override the default GetHashCode implementation.
/// </summary>
/// <returns></returns>
public override int GetHashCode() {
return _hashCode;
}
/// <summary>
/// Compute the hash code for this object.
/// </summary>
/// <returns></returns>
private int ComputeHashCode() {
int hashCode = 33;
unchecked
{
hashCode = (hashCode * 17) + StsAuthority.GetHashCode();
hashCode = (hashCode * 17) + ServicePrincipalName.GetHashCode();
}
return hashCode;
}
}
}
|