/// <summary>
/// Gets all <see cref="Subscription"/> instances for a team foundation server
/// </summary>
private Subscription[] Subscriptions()
{
// 1. Get an instance of the types on which we will perform reflection
// The SubscriptionOnServer contains the logic for retrieving event subscriptions
Type subscriptionOnServerType = typeof(SubscriptionOnServer);
// The SubscriptionOnServer contains the logic for executing stored procedures
Type dbType = subscriptionOnServerType.Assembly.GetType("Microsoft.TeamFoundation.Server.DB");
// 2. Get an instance of the subscriptionOnServer class through its factory method
MethodInfo serivceMethod = dbType.GetMethod("Service", BindingFlags.Static | BindingFlags.Public);
object service = serivceMethod.Invoke(dbType, null);
// 3. Initialize the connectionstring property of the DB class
MethodInfo initMethod = dbType.GetMethod("Init", BindingFlags.Instance | BindingFlags.NonPublic);
initMethod.Invoke(service, new object[] { ConfigurationManager.AppSettings["ConnectionString"] });
// 4. Retrieve all the subscriptions on the server
MethodInfo AllBareSubscriptionsMethod = subscriptionOnServerType.GetMethod("AllBareSubscriptions", BindingFlags.Static | BindingFlags.NonPublic);
ArrayList allSubscriptionsOnServer = (ArrayList)AllBareSubscriptionsMethod.Invoke(subscriptionOnServerType, new object[] { });
// 5. Get the FieldInfo information for the internal subscription field on the SubscriptionOnServer type
FieldInfo subscriptionField = subscriptionOnServerType.GetField("subscription", BindingFlags.NonPublic | BindingFlags.Instance);
// 6. Get the Subscription representation of the SubscriptionOnServer instances that were retrieved
Subscription[] allSubscriptions = new Subscription[allSubscriptionsOnServer.Count];
for (int idx = 0; idx < allSubscriptionsOnServer.Count; idx++)
{
SubscriptionOnServer currentSubscriptionOnServer = (SubscriptionOnServer)allSubscriptionsOnServer[idx];
Subscription currentSubscription = (Subscription)subscriptionField.GetValue(currentSubscriptionOnServer);
allSubscriptions[idx] = currentSubscription;
}
return allSubscriptions;
}