예제 #1
0
        /// <summary>
        /// Load all Subscribers from a given assembly and adds them to the Ella-internal management<br />
        /// <remarks>Any type must define the <see cref="Ella.Attributes.SubscriberAttribute"/> attribute in order to be detected as subcriber</remarks>
        /// </summary>
        /// <param name="a">The assembly where to search subscribers</param>
        /// <param name="createInstances">if <c>true</c>, instances of discovered subscribers are created</param>
        /// <param name="activation"></param>
        public static void Subscribers(Assembly a, bool createInstances = false, Func <Type, object> activation = null)
        {
            if (a == (Assembly)null)
            {
                throw new ArgumentNullException("a");
            }

            _log.DebugFormat("Loading subscribers from {0}", a.FullName);
            AssemblyName[] referencedAssemblies = a.GetReferencedAssemblies();

            foreach (AssemblyName name in referencedAssemblies)
            {
                ResolveAndLoadAssembly(name);
            }
            Type[] exportedTypes = a.GetExportedTypes();
            foreach (Type t in exportedTypes)
            {
                if (Is.Subscriber(t))
                {
                    _log.DebugFormat("Found subscriber {0} in assembly {1}", t, a.FullName);
                    if (!EllaModel.Instance.Subscribers.Contains(t))
                    {
                        EllaModel.Instance.Subscribers.Add(t);
                    }
                    if (createInstances)
                    {
                        Create.ModuleInstance(t, activation);
                    }
                }
            }
        }
예제 #2
0
        public void StopAPublisher()
        {
            object instance = Create.ModuleInstance(typeof(TestPublisher));

            Start.Publisher(instance);
            Thread.Sleep(100);
            Stop.Publisher(instance);
        }
예제 #3
0
        public void CreateInstanceOfAModule()
        {
            object publisher = Create.ModuleInstance(typeof(TestPublisher));

            Assert.IsNotNull(publisher);
            Assert.IsInstanceOfType(publisher, typeof(TestPublisher));

            object subscriber = Create.ModuleInstance(typeof(TestSubscriber));

            Assert.IsNotNull(subscriber);
            Assert.IsInstanceOfType(subscriber, typeof(TestSubscriber));
            try
            {
                subscriber = Create.ModuleInstance(typeof(TestSubscriberMethodFactory));
                Assert.IsNull(subscriber);
            }
            catch (ArgumentException)
            {
            }

            try
            {
                subscriber = Create.ModuleInstance(typeof(TestSubscriberNoFactory));
                Assert.IsNull(subscriber);
            }
            catch (ArgumentException)
            {
            }


            subscriber = Create.ModuleInstance(typeof(TestSubscriberStaticMethodFactory));
            Assert.IsNotNull(subscriber);
            Assert.IsInstanceOfType(subscriber, typeof(TestSubscriberStaticMethodFactory));

            try
            {
                subscriber = Create.ModuleInstance(typeof(TestSubscriberStaticConstructerFactory));
                Assert.IsNull(subscriber);
            }
            catch (ArgumentException)
            {
            }
        }
예제 #4
0
        public void StartAPublisher()
        {
            object instance = Create.ModuleInstance(typeof(TestPublisher));

            Start.Publisher(instance);
        }