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);
        }
        private TypeAssembler CreateTypeAssembler(
            IMutableTypeFactory mutableTypeFactory = null,
            IAssembledTypeIdentifierProvider assembledTypeIdentifierProvider = null,
            IComplexSerializationEnabler complexSerializationEnabler         = null,
            string configurationId = "id",
            params IParticipant[] participants)
        {
            mutableTypeFactory = mutableTypeFactory ?? _mutableTypeFactoryMock.Object;
            // Do not fix up assembledTypeIdentifierProvider.
            complexSerializationEnabler = complexSerializationEnabler ?? _complexSerializationEnablerMock.Object;

            var typeAssembler = new TypeAssembler(configurationId, participants.AsOneTime(), mutableTypeFactory, complexSerializationEnabler);

            if (assembledTypeIdentifierProvider != null)
            {
                PrivateInvoke.SetNonPublicField(typeAssembler, "_assembledTypeIdentifierProvider", assembledTypeIdentifierProvider);
            }

            return(typeAssembler);
        }
        public void Initialization()
        {
            var participantStub = new Mock <IParticipant>();
            var participantWithCacheProviderStub = new Mock <IParticipant>();
            var identifierProviderStub           = new Mock <ITypeIdentifierProvider>();

            participantWithCacheProviderStub.SetupGet(stub => stub.PartialTypeIdentifierProvider).Returns(identifierProviderStub.Object);
            var participants = new[] { participantStub.Object, participantWithCacheProviderStub.Object };

            var typeAssembler = new TypeAssembler("configId", participants.AsOneTime(), _mutableTypeFactoryMock.Object, _complexSerializationEnablerMock.Object);

            Assert.That(typeAssembler.ParticipantConfigurationID, Is.EqualTo("configId"));
            Assert.That(typeAssembler.Participants, Is.EqualTo(participants));

            var assembledTypeIdentifierProvider = PrivateInvoke.GetNonPublicField(typeAssembler, "_assembledTypeIdentifierProvider");

            Assert.That(assembledTypeIdentifierProvider, Is.TypeOf <AssembledTypeIdentifierProvider>());
            var identifierProviders = PrivateInvoke.GetNonPublicField(assembledTypeIdentifierProvider, "_identifierProviders");

            Assert.That(identifierProviders, Is.EqualTo(new[] { identifierProviderStub.Object }));
        }