Esempio n. 1
0
        //public static T Cast<T>(object o)
        //{
        //	return (T)o;
        //}

        static void Main(string[] args)
        {
            SemanticProcessor sp = new SemanticProcessor();

            // AnotherType gets notified when instances of OneType are added to the pool.
            sp.Register <SurfaceMembrane, AReceptor>();                         // auto register
            sp.Register <SurfaceMembrane, BReceptor>();
            sp.Register <SurfaceMembrane, CReceptor>();

            // Explicit register
            //sp.TypeNotify<AReceptor, OneType>();
            //sp.TypeNotify<AReceptor, SecondType>();

            OneType           t1 = new OneType();
            SecondType        t2 = new SecondType();
            SecondDerivedType t3 = new SecondDerivedType();

            // object foo = Cast<SecondType>(t3);

            sp.ProcessInstance(sp.Surface, t1);
            sp.ProcessInstance(sp.Surface, t2);
            sp.ProcessInstance(sp.Surface, t3);

            Thread.Sleep(1000);                         // Wait for threaded processes to complete.

            Console.WriteLine("\r\nChained processing...");
            sp.RemoveTypeNotify <SurfaceMembrane, AReceptor, IOneType>();
            sp.RemoveTypeNotify <SurfaceMembrane, AReceptor, SecondType>();
            sp.RemoveTypeNotify <SurfaceMembrane, BReceptor, OneType>();
            sp.RemoveTypeNotify <SurfaceMembrane, CReceptor, SecondDerivedType>();

            // Chaining...
            // auto register:
            sp.Register <SurfaceMembrane, Chain1>();
            sp.Register <SurfaceMembrane, Chain2>();

            // Explicit register:
            //sp.TypeNotify<Chain1, OneType>();
            //sp.TypeNotify<Chain2, SecondType>();

            sp.ProcessInstance(sp.Surface, new OneType());

            Thread.Sleep(1000);                         // Wait for threaded processes to complete.
        }
        public void RemoveType()
        {
            callSuccess = false;
            SemanticProcessor sp = new SemanticProcessor();

            sp.Register <TestMembrane, TestReceptor>();
            sp.RemoveTypeNotify <TestMembrane, TestReceptor, TestSemanticType>();
            sp.ProcessInstance <TestMembrane, TestSemanticType>(true);
            Assert.That(!callSuccess, "Expected TestReceptor.Process to NOT be called.");
        }