예제 #1
0
        public void Should_select_plugin_instances_that_apply_in_order()
        {
            var instance3 = new SomeImplementation3();

            _definitions.Append <SomeImplementation4>()
            .Append <SomeImplementation1>(x => x.SomeValue < 6)
            .Append <SomeImplementation2>(x => x.SomeValue > 5)
            .Append(instance3);
            var definitions = _definitions.ThatApplyTo(new List <ISomePlugin>
            {
                new SomeImplementation1(),
                new SomeImplementation2(),
                new SomeImplementation3(),
                new SomeImplementation3(),
                new SomeImplementation4(x => x.SomeValue > 5),
                new SomeImplementation5(x => x.SomeValue < 6),
                null
            }, new SomePluginContext {
                SomeValue = 5
            }).ToList();

            definitions.Count.ShouldEqual(4);
            definitions[0].GetType().ShouldEqual(typeof(SomeImplementation1));
            definitions[1].GetType().ShouldEqual(typeof(SomeImplementation3));
            definitions[2].GetType().ShouldEqual(typeof(SomeImplementation3));
            definitions[3].GetType().ShouldEqual(typeof(SomeImplementation5));
        }
예제 #2
0
        public void Should_prepend_a_plugin_before_another_and_remove_existing()
        {
            var instance2 = new SomeImplementation2();
            var instance3 = new SomeImplementation3();

            _definitions.Append <SomeImplementation1>()
            .Append(instance2)
            .Append <SomeImplementation3>()
            .Append <SomeImplementation4>();

            _definitions.Prepend(instance3).Before <SomeImplementation1>();
            _definitions.Prepend <SomeImplementation4>().Before <SomeImplementation2>();

            var definitions = _definitions.ToList();

            _definitions.Count().ShouldEqual(4);
            definitions[0].HasInstance.ShouldBeTrue();
            definitions[0].Instance.ShouldEqual(instance3);
            definitions[1].HasInstance.ShouldBeFalse();
            definitions[1].Type.ShouldEqual(typeof(SomeImplementation1));
            definitions[2].HasInstance.ShouldBeFalse();
            definitions[2].Type.ShouldEqual(typeof(SomeImplementation4));
            definitions[3].HasInstance.ShouldBeTrue();
            definitions[3].Instance.ShouldEqual(instance2);
        }
예제 #3
0
        public void Should_select_plugin_defintions_that_apply_in_order()
        {
            var instance3 = new SomeImplementation3();

            _definitions
            .Append <SomeImplementation1>(x => x.SomeValue < 6)
            .Append <SomeImplementation2>(x => x.SomeValue > 5)
            .Append(instance3);

            var definitions = _definitions.ThatApplyTo(new SomePluginContext {
                SomeValue = 5
            }).ToList();

            definitions.Count.ShouldEqual(2);
            definitions[0].HasInstance.ShouldBeFalse();
            definitions[0].Type.ShouldEqual(typeof(SomeImplementation1));
            definitions[1].HasInstance.ShouldBeTrue();
            definitions[1].Instance.ShouldEqual(instance3);
        }