public void TestPartialParametersRestriction()
        {
            var testHub = new MessagesHub();

            Assert.Throws <MessagesUtils.MessageHandlerSignatureException>(() =>
            {
                var instance = new HandlerObject2();

                MessagesUtils.AutoSubscribe(instance, testHub);
            });
        }
        public void TestAutoSubscription()
        {
            var testHub = new MessagesHub();

            var instance = new HandlerObject();

            var subscriptions = MessagesUtils.AutoSubscribe(instance, testHub);

            using (Disposable.FromAction(() =>
            {
                foreach (var s in subscriptions)
                {
                    s.Subscription.Dispose();
                }
            }))
            {
                string str1  = "value1";
                string str2  = "value2";
                int    ival1 = 77;

                Assert.AreEqual(instance.StrValue, string.Empty);
                Assert.AreEqual(instance.IntValue, 0);

                NotificationMessage1.Broadcast(str1, testHub);

                Assert.AreEqual(instance.StrValue, str1);

                NotificationMessage2.Broadcast(str2, ival1, testHub);

                Assert.AreEqual(instance.StrValue, str2);
                Assert.AreEqual(instance.IntValue, ival1);
            }

            Assert.Throws <Exception>(() =>
            {    // all subscriptions must gone after using (...) block
                NotificationMessage1.Broadcast(string.Empty, testHub);
            });
        }