예제 #1
0
            public void NullEvent()
            {
                EventBrokerService service = new EventBrokerService();
                SpyEventSource     source  = new SpyEventSource();

                Assert.Throws <ArgumentNullException>(delegate
                {
                    service.RegisterSource(source, null, "MyEvent");
                });
            }
예제 #2
0
            public void NullSource()
            {
                EventBrokerService service     = new EventBrokerService();
                SpyEventSource     source      = new SpyEventSource();
                EventInfo          sourceEvent = source.GetType().GetEvent("MySource");

                Assert.Throws <ArgumentNullException>(delegate
                {
                    service.RegisterSource(null, sourceEvent, "MyEvent");
                });
            }
예제 #3
0
            public void UnregisterSourceUnwiresHandler()
            {
                EventBrokerService service     = new EventBrokerService();
                SpyEventSource     source      = new SpyEventSource();
                EventInfo          sourceEvent = source.GetType().GetEvent("MySource");

                service.RegisterSource(source, sourceEvent, "MyEvent");

                service.UnregisterSource(source, "MyEvent");

                Assert.False(source.HasHandlers);
            }
예제 #4
0
            public void SourcesAreStoredWithWeakReferences()
            {
                SpyEventSource.FinalizerCalled = false;
                EventBrokerService service     = new EventBrokerService();
                EventInfo          sourceEvent = typeof(SpyEventSource).GetEvent("MySource");

                service.RegisterSource(new SpyEventSource(), sourceEvent, "MyEvent");

                GC.Collect();
                GC.WaitForPendingFinalizers();

                Assert.True(SpyEventSource.FinalizerCalled);
            }
예제 #5
0
            public void RegistrationSourceFirst()
            {
                EventBrokerService service     = new EventBrokerService();
                SpyEventSource     source      = new SpyEventSource();
                SpyEventSink       sink        = new SpyEventSink();
                EventInfo          sourceEvent = source.GetType().GetEvent("MySource");
                MethodInfo         sinkMethod  = sink.GetType().GetMethod("MySink");

                service.RegisterSource(source, sourceEvent, "MyEvent");
                service.RegisterSink(sink, sinkMethod, "MyEvent");

                source.InvokeMySource();

                Assert.Equal(source.SourceText, sink.EventValue);
            }
예제 #6
0
            public void UnregisterSinkUnwiresHandler()
            {
                EventBrokerService service     = new EventBrokerService();
                SpyEventSource     source      = new SpyEventSource();
                SpyEventSink       sink        = new SpyEventSink();
                EventInfo          sourceEvent = source.GetType().GetEvent("MySource");
                MethodInfo         sinkMethod  = sink.GetType().GetMethod("MySink");

                service.RegisterSource(source, sourceEvent, "MyEvent");
                service.RegisterSink(sink, sinkMethod, "MyEvent");
                service.UnregisterSink(sink, "MyEvent");

                source.InvokeMySource();

                Assert.False(sink.WasCalled);
            }
예제 #7
0
            public void ExceptionsAreCollectedAndRethrown()
            {
                EventBrokerService    service     = new EventBrokerService();
                SpyEventSource        source      = new SpyEventSource();
                ExceptionThrowingSink sink1       = new ExceptionThrowingSink();
                ExceptionThrowingSink sink2       = new ExceptionThrowingSink();
                EventInfo             sourceEvent = source.GetType().GetEvent("MySource");
                MethodInfo            sinkMethod  = sink1.GetType().GetMethod("MySink");

                service.RegisterSink(sink1, sinkMethod, "MyEvent");
                service.RegisterSink(sink2, sinkMethod, "MyEvent");
                service.RegisterSource(source, sourceEvent, "MyEvent");

                EventBrokerException ex =
                    Assert.Throws <EventBrokerException>(delegate
                {
                    source.InvokeMySource();
                });

                Assert.Equal(2, ex.Exceptions.Count);
            }
예제 #8
0
        public override object BuildUp(IBuilderContext context,
                                       object buildKey,
                                       object existing)
        {
            IEventBrokerPolicy policy  = context.Policies.Get <IEventBrokerPolicy>(buildKey);
            EventBrokerService service = context.Locator.Get <EventBrokerService>();

            if (policy != null && service != null)
            {
                foreach (KeyValuePair <string, MethodInfo> kvp in policy.Sinks)
                {
                    service.RegisterSink(existing, kvp.Value, kvp.Key);
                }

                foreach (KeyValuePair <string, EventInfo> kvp in policy.Sources)
                {
                    service.RegisterSource(existing, kvp.Value, kvp.Key);
                }
            }

            return(base.BuildUp(context, buildKey, existing));
        }