public MutableType CreateAddtionalProxyType(object additionalTypeID, Type baseType) { ArgumentUtility.CheckNotNull("baseType", baseType); var type = _mutableTypeFactory.CreateProxy(baseType, ProxyKind.AdditionalType).Type; _additionalTypes.Add(additionalTypeID, type); return(type); }
public TypeAssemblyResult AssembleType(AssembledTypeID typeID, IParticipantState participantState, IMutableTypeBatchCodeGenerator codeGenerator) { ArgumentUtility.CheckNotNull("typeID", typeID); ArgumentUtility.CheckNotNull("participantState", participantState); ArgumentUtility.CheckNotNull("codeGenerator", codeGenerator); var requestedType = typeID.RequestedType; CheckRequestedType(requestedType); if (ShortCircuitTypeAssembly(requestedType)) { return(new TypeAssemblyResult(requestedType)); } var typeModificationTracker = _mutableTypeFactory.CreateProxy(requestedType, ProxyKind.AssembledType); var context = new ProxyTypeAssemblyContext( _mutableTypeFactory, _participantConfigurationID, participantState, requestedType, typeModificationTracker.Type); foreach (var participant in _participants) { var idPart = _assembledTypeIdentifierProvider.GetPart(typeID, participant); participant.Participate(idPart, context); } if (!typeModificationTracker.IsModified()) { return(new TypeAssemblyResult(requestedType)); } var generatedTypesContext = GenerateTypes(typeID, context, codeGenerator); context.OnGenerationCompleted(generatedTypesContext); return(new TypeAssemblyResult( generatedTypesContext.GetGeneratedType(context.ProxyType), context.AdditionalTypes.ToDictionary(kvp => kvp.Key, kvp => generatedTypesContext.GetGeneratedType(kvp.Value)))); }