private void Bind(object obj, Type targetType)
        {
            Contract.Requires(targetType != null);

            if (!disposed && !object.Equals(obj, boundSource))
            {
                boundSource = obj;

                CancelSubscribe();

                observer = Observable2.CoerceObserver <object>(obj);

                if (targetType == typeof(IEnumerable))
                {
                    TrySubscribeEnumerable(obj);
                }
                else
                {
                    TrySubscribe(obj);
                }
            }
        }