예제 #1
0
        public ModuleArchitecture GetOrCreateModule(String name)
        {
            ArgumentValidator.ValidateNotNull("Module name", name);

            ModuleArchitectureImpl result = null;

            if (!this._modules.CQ.TryGetValue(name, out result))
            {
                result = new ModuleArchitectureImpl(name, this, this._metaInfo.Query, this._compositeIDGenerator, this._modelTypeSupport);
                this._modules.Add(name, result);
            }

            return(result);
        }
예제 #2
0
        protected ModuleModelMutable NewModuleModel(DictionaryQuery <CompositeModelType, CompositeModelTypeModelScopeSupport> compositeModelTypeSupport, DictionaryProxy <Int32, CompositeModel> models, LayerModelMutable owningLayer, ModuleArchitectureImpl module)
        {
            var state     = new ModuleModelState(this.CollectionsFactory);
            var immutable = new ModuleModelImmutable(state);
            var result    = new ModuleModelMutable(state, immutable);

            state.ModuleName = module.Name;
            state.LayerModel = owningLayer;
            state.Assembler  = module.LayeredCompositeAssembler;

            foreach (var modelType in this.ModelTypeSupport.Keys)
            {
                IDictionary <CompositeModel, Visibility> visibilities = null;
                if (!state.CompositeVisibilities.TryGetValue(modelType, out visibilities))
                {
                    visibilities = new Dictionary <CompositeModel, Visibility>(ReferenceEqualityComparer <CompositeModel> .ReferenceBasedComparer);
                    state.CompositeVisibilities.Add(modelType, visibilities);
                }
                foreach (LayeredCompositeAssemblyInfo info in module.LayeredCompositeAssembler.GetInfos(modelType).Cast <LayeredCompositeAssemblyInfo>())
                {
                    var cModel = this.NewCompositeModel(compositeModelTypeSupport, owningLayer.IQ.ApplicationModel, info, owningLayer.IQ.LayerName + "-" + module.Name);
                    models.Add(cModel.CompositeModelID, cModel);
                    state.CompositeModels.Add(cModel);
                    visibilities.Add(cModel, info.Visibility);
                }
            }

            return(result);
        }