internal static CompositeBuilder CreateBuilder( CompositeModelTypeInstanceScopeSupport modelSupport, CompositeInstanceStructureOwner structureOwner, CompositeModelType compositeModelType, IEnumerable<Type> compositeTypes ) { var compositeTypesArr = compositeTypes.ToArray(); var tuple = ( (ModuleImpl) structureOwner ).FindModelForBuilder( compositeModelType, compositeTypesArr ); var uses = UsesContainerMutableImpl.CreateWithParent( tuple.Item2.UsesContainer ); return new CompositeBuilderImpl( compositeTypesArr, uses, (CompositeInstanceImpl) modelSupport.CreateInstance( tuple.Item1, tuple.Item2, compositeTypesArr, uses.Query ) ); }
public virtual CompositeBuilder CreateBuilder(StructureServiceProviderSPI structureServiceProvider, Type[] compositeTypes) { ThrowIfGenericParams(compositeTypes); CompositeModel model = structureServiceProvider.Structure.ModelInfoContainer.GetCompositeModelInfo(this.ModelScopeSupport.AssemblyScopeSupport.ModelType, compositeTypes).Model; UsesContainerMutable uses = UsesContainerMutableImpl.CreateWithParent(model.UsesContainer); return(new CompositeBuilderImpl(compositeTypes, uses, (CompositeInstanceImpl)this.CreateInstance(structureServiceProvider.Structure, model, compositeTypes, uses.Query))); }
protected ApplicationArchitectureSkeleton(IEnumerable <CompositeModelTypeAssemblyScopeSupport> modelTypeSupport) { ArgumentValidator.ValidateNotNull("Composite model type supports", modelTypeSupport); this._collectionsFactory = CollectionsFactorySingleton.DEFAULT_COLLECTIONS_FACTORY; this._modelTypeSupport = this._collectionsFactory.NewDictionaryProxy(modelTypeSupport.ToDictionary(support => support.ModelType, support => support)).CQ; this._metaInfoContainer = UsesContainerMutableImpl.CreateEmpty(); this._additionalInjectionFunctionalities = this._collectionsFactory.NewDictionaryProxy <Type, InjectionFunctionality>(); }
public CompositeAssemblyInfoImpl(Int32 id, CompositeModelType modelType, UsesContainerQuery parentContainer) { ArgumentValidator.ValidateNotNull("Composite model type", modelType); this._id = id; this._fragmentInfos = new Dictionary <FragmentModelType, FragmentAssemblyInfo>(); this._defaultProviders = new Dictionary <PropertyInfo, Func <PropertyInfo, ApplicationSPI, Object> >(); this._metaInfoContainer = UsesContainerMutableImpl.CreateWithParent(parentContainer); this._modelType = modelType; this._types = new HashSet <Type>(); }
internal ModuleArchitectureImpl( String moduleName, LayerArchitecture layer, UsesContainerQuery parentContainer, Func <Int32> compositeIDGenerator, DictionaryQuery <CompositeModelType, CompositeModelTypeAssemblyScopeSupport> modelTypeSupport ) { ArgumentValidator.ValidateNotNull("Layer", layer); ArgumentValidator.ValidateNotNull("Parent meta-info container", parentContainer); this._moduleName = moduleName; this._layer = layer; this._metaInfo = UsesContainerMutableImpl.CreateWithParent(parentContainer); this._assembler = new LayeredCompositeAssemblerImpl(this, compositeIDGenerator, modelTypeSupport, this._metaInfo, layer.Architecture.CollectionsFactory); this._domainSpecificAssemblers = new DomainSpecificAssemblerAggregatorImpl <LayeredCompositeAssembler>(layer.Architecture.CollectionsFactory); }
internal LayerArchitectureImpl( LayeredArchitecture application, UsesContainerQuery parentContainer, Func <Int32> compositeIDGenerator, DictionaryQuery <CompositeModelType, CompositeModelTypeAssemblyScopeSupport> modelTypeSupport, String name, Action <LayerArchitecture[]> usageAction ) { ArgumentValidator.ValidateNotNull("Application", application); ArgumentValidator.ValidateNotNull("Model type support", modelTypeSupport); ArgumentValidator.ValidateNotNull("Composite ID Generator", compositeIDGenerator); ArgumentValidator.ValidateNotNull("Action to tell usage", usageAction); ArgumentValidator.ValidateNotNull("Parent meta-info container", parentContainer); this._application = application; this._compositeIDGenerator = compositeIDGenerator; this._usageAction = usageAction; this._layerName = name; this._modelTypeSupport = modelTypeSupport; this._metaInfo = UsesContainerMutableImpl.CreateWithParent(parentContainer); this._modules = application.CollectionsFactory.NewDictionaryProxy <String, ModuleArchitectureImpl>(); this._domainSpecificAssemblers = new DomainSpecificAssemblerAggregatorImpl <LayerArchitecture>(application.CollectionsFactory); }
public ServiceCompositeInstance GetService(CompositeInstanceStructureOwner structureOwner, CompositeModel model, IEnumerable <Type> serviceTypes, UsesContainerQuery usesContainer, String serviceID) { #if SILVERLIGHT lock (this._services) { #endif return(this._services. #if SILVERLIGHT GetOrAdd_NotThreadSafe( #else GetOrAdd( #endif serviceID, id => { var builderUses = UsesContainerMutableImpl.CreateWithParent(model.UsesContainer); var instance = new ServiceCompositeInstanceImpl(structureOwner, model, serviceTypes, builderUses.Query, serviceID, new MainCompositeConstructorArguments()); return instance; })); #if SILVERLIGHT } #endif }