public void Compose()
        {
            var adviceBuilder1Mock = MockRepository.GenerateStrictMock <IAdviceBuilder>();
            var adviceBuilder2Mock = MockRepository.GenerateStrictMock <IAdviceBuilder>();
            var adviceBuilders     = new[] { adviceBuilder1Mock, adviceBuilder2Mock };

            var advice1 = ObjectMother.GetAdvice();
            var advice2 = ObjectMother.GetAdvice();

            adviceBuilder1Mock.Expect(x => x.Build()).Return(advice1);
            adviceBuilder2Mock.Expect(x => x.Build()).Return(advice2);

            var joinPoint = ObjectMother.GetJoinPoint();

            var pointcutVisitorMock = MockRepository.GenerateStrictMock <IPointcutEvaluator>();
            var adviceSequencerMock = MockRepository.GenerateStrictMock <IAdviceSequencer>();

            var fakeAdvices = new Advice[0];

            pointcutVisitorMock.Expect(x => x.Matches(advice1, joinPoint)).Return(false);
            pointcutVisitorMock.Expect(x => x.Matches(advice2, joinPoint)).Return(true);
            adviceSequencerMock.Expect(x => x.Sort(Arg <IEnumerable <Advice> > .List.Equal(new[] { advice2 }))).Return(fakeAdvices);

            var composer = new AdviceComposer(adviceSequencerMock, pointcutVisitorMock);
            var result   = composer.Compose(adviceBuilders.AsOneTime(), joinPoint);

            adviceBuilder1Mock.VerifyAllExpectations();
            adviceBuilder2Mock.VerifyAllExpectations();
            pointcutVisitorMock.VerifyAllExpectations();
            adviceSequencerMock.VerifyAllExpectations();
            Assert.That(result, Is.SameAs(fakeAdvices));
        }
        static ObjectFactory()
        {
            //var assembler = SafeServiceLocator.Current.GetInstance<IAssembler>();
            var declarationProvider = SafeServiceLocator.Current.GetInstance <IDeclarationProvider>();
            var adviceComposer      = new AdviceComposer(new PointcutEvaluator());
            var adviceWeaver        = SafeServiceLocator.Current.GetInstance <IAdviceWeaver>();
            var intertypeWeaver     = SafeServiceLocator.Current.GetInstance <IIntertypeWeaver>();
            var eventMethodPreparer = SafeServiceLocator.Current.GetInstance <IEventMethodPreparer>();
            var assembler           = new Participant(declarationProvider, adviceComposer, adviceWeaver, intertypeWeaver, eventMethodPreparer);


            var typeModifier      = SafeServiceLocator.Current.GetInstance <ITypeModifier>();
            var typeAssembler     = new TypeAssembler(new[] { assembler }, typeModifier);
            var constructorFinder = new ConstructorFinder();
            var delegateFactory   = new DelegateFactory();
            var typeCache         = new TypeCache(typeAssembler, constructorFinder, delegateFactory);

            s_objectFactory = new Remotion.TypePipe.ObjectFactory(typeCache);
        }