Example #1
0
 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>();
        }
Example #4
0
        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>();
        }
Example #5
0
        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);
        }
Example #6
0
        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
        }