Exemplo n.º 1
0
      internal ModuleImpl( ApplicationValidationResultIQ validationResult, DictionaryQuery<CompositeModel, PublicCompositeTypeGenerationResult> loadingResults, LayerImpl layer, ModuleModel model )
      {
         ArgumentValidator.ValidateNotNull( "Layer instance", layer );
         ArgumentValidator.ValidateNotNull( "Module model", model );

         this._layer = layer;
         this._moduleModel = model;
         this._serviceContainer = new ThreadsafeServiceContainer();
         this._modelInfoContainer = new ModelInfoContainerImpl(
            layer.InternalApplication.ModelTypeSupportInternal,
            model.CompositeModelsInThisContainer,
            validationResult,
            loadingResults,
            layer.Application.CollectionsFactory,
            model.LayerModel.ApplicationModel.GenericPropertyMixinType,
            model.LayerModel.ApplicationModel.GenericEventMixinType
            );
#if SILVERLIGHT
         this._compositeTypeLookupCache = new Dictionary<CompositeModelType, IDictionary<Type[], Tuple<CompositeInstanceStructureOwner, CompositeModel>>>();
#else
         this._compositeTypeLookupCache = new System.Collections.Concurrent.ConcurrentDictionary<CompositeModelType, System.Collections.Concurrent.ConcurrentDictionary<Type[], Tuple<CompositeInstanceStructureOwner, CompositeModel>>>();
#endif

         this._serviceProvider = new StructureServiceProviderImpl(
            this,
            layer.InternalApplication.ModelTypeSupportInternal,
            matcher => this.FindVisibleModels( matcher )
            );
      }
        internal LayeredApplicationImpl(
            LayeredApplicationModel model,
            IEnumerable <Tuple <CompositeModelType, CompositeModelTypeModelScopeSupport> > compositeModelTypeSupport,
            ApplicationValidationResultIQ validationResult,
            DictionaryQuery <CompositeModel, PublicCompositeTypeGenerationResult> loadingResults,
            String name,
            String mode,
            String version
            )
            : base(
                model,
                compositeModelTypeSupport,
                name,
                mode,
                version
                )
        {
            DictionaryProxy <LayerModel, LayerImpl> allLayers = model.CollectionsFactory.NewDictionaryProxy <LayerModel, LayerImpl>();

            foreach (LayerModel layerModel in model.TopLevelLayers)
            {
                this.ProcessLayers(validationResult, loadingResults, allLayers, layerModel);
            }

            this._allLayers = allLayers.CQ;
        }
 protected static void CheckValidation(ApplicationValidationResultIQ validationResult, String msg)
 {
     if (validationResult.HasAnyErrors())
     {
         throw new InvalidApplicationModelException(validationResult, msg);
     }
 }
        internal SingletonApplicationImpl(
            SingletonApplicationModel applicationModel,
            IEnumerable <Tuple <CompositeModelType, CompositeModelTypeModelScopeSupport> > compositeModelTypeSupport,
            ApplicationValidationResultIQ validationResult,
            DictionaryQuery <CompositeModel, PublicCompositeTypeGenerationResult> loadingResults,
            String name,
            String mode,
            String version
            )
            : base(
                applicationModel,
                compositeModelTypeSupport,
                name,
                mode,
                version
                )
        {
            this._modelInfoContainer       = new ModelInfoContainerImpl(this.InternalModelSupport, applicationModel.CompositeModelsInThisContainer, validationResult, loadingResults, this.CollectionsFactory, applicationModel.GenericPropertyMixinType, applicationModel.GenericEventMixinType);
            this._structureServiceProvider = new StructureServiceProviderImpl(
                this,
                this.ModelTypeSupport,
                matcher => applicationModel.CompositeModelsInThisContainer
                .Where(matcher)
                .Select(model => Tuple.Create <CompositeInstanceStructureOwner, CompositeModel>(this, model))
                );

            this._serviceContainer = new ThreadsafeServiceContainer();
        }
Exemplo n.º 5
0
 internal LayerImpl(ApplicationValidationResultIQ validationResult, DictionaryQuery <CompositeModel, PublicCompositeTypeGenerationResult> loadingResults, LayeredApplicationImpl application, LayerModel layerModel)
 {
     this._application = application;
     this._model       = layerModel;
     this._modules     = layerModel.ApplicationModel.CollectionsFactory.NewDictionaryProxy <ModuleModel, Module>(
         layerModel.ModuleModels.ToDictionary(model => model, model => (Module) new ModuleImpl(validationResult, loadingResults, this, model))
         ).CQ;
 }
        private void ProcessLayers(ApplicationValidationResultIQ validationResult, DictionaryQuery <CompositeModel, PublicCompositeTypeGenerationResult> loadingResults, DictionaryProxy <LayerModel, LayerImpl> layers, LayerModel layerModel)
        {
            if (!layers.CQ.ContainsKey(layerModel))
            {
                layers.Add(layerModel, new LayerImpl(validationResult, loadingResults, this, layerModel));
            }

            foreach (LayerModel used in layerModel.UsedLayerModels)
            {
                this.ProcessLayers(validationResult, loadingResults, layers, used);
            }
        }
Exemplo n.º 7
0
 /// <summary>
 /// Helper method to get enumerable of all errors of some <see cref="ApplicationValidationResultIQ"/>.
 /// </summary>
 /// <param name="result">The <see cref="ApplicationValidationResultIQ"/>.</param>
 /// <returns>Enumerable of all errors of a single <see cref="ApplicationValidationResultIQ"/>.</returns>
 /// <exception cref="NullReferenceException">If <paramref name="result"/> is <c>null</c>.</exception>
 public static IEnumerable <AbstractValidationError> GetAllErrors(this ApplicationValidationResultIQ result)
 {
     return(result.InjectionValidationErrors
            .Cast <AbstractValidationError>()
            .Concat(result.StructureValidationErrors)
            .Concat(result.InternalValidationErrors)
            .Concat(result.CompositeValidationResults.Values.SelectMany(cResult =>
                                                                        cResult.InjectionValidationErrors.Cast <AbstractValidationError>()
                                                                        .Concat(cResult.StructureValidationErrors)
                                                                        .Concat(cResult.InternalValidationErrors)
                                                                        )));
 }
        public ModelInfoContainerImpl(
            DictionaryQuery <CompositeModelType, CompositeModelTypeInstanceScopeSupport> modelSupport,
            SetQuery <CompositeModel> models,
            ApplicationValidationResultIQ validationResult,
            DictionaryQuery <CompositeModel, PublicCompositeTypeGenerationResult> loadingResults,
            CollectionsFactory collectionsFactory,
            Type genericPropertyMixinType,
            Type genericEventMixinType
            )
        {
            ArgumentValidator.ValidateNotNull("Model support", modelSupport);
            ArgumentValidator.ValidateNotNull("Models", models);
            ArgumentValidator.ValidateNotNull("Validation result", validationResult);

            PublicCompositeTypeGenerationResult[] typeGenResults = new PublicCompositeTypeGenerationResult[models.Count];
            Int32 gIdx = 0;

            foreach (CompositeModel model in models)
            {
                typeGenResults[gIdx] = loadingResults[model];
                ++gIdx;
            }

            this._compositeModels = collectionsFactory.NewDictionaryProxy <CompositeModelType, SetQuery <CompositeModelInfo> >(
                models
                .Select(model => model.ModelType)
                .Distinct()
                .ToDictionary(
                    modelType => modelType,
                    modelType2 =>
                    collectionsFactory.NewSetProxy <CompositeModelInfo>(new HashSet <CompositeModelInfo>(models
                                                                                                         .Select((modelInner, idx) => new KeyValuePair <CompositeModel, PublicCompositeTypeGenerationResult>(modelInner, typeGenResults[idx]))
                                                                                                         .Where(kvp => kvp.Key.ModelType.Equals(modelType2))
                                                                                                         .Select(kvp => new ModelInfoImpl(kvp.Key, kvp.Value, collectionsFactory)),
                                                                                                         ReferenceEqualityComparer <CompositeModelInfo> .ReferenceBasedComparer)).CQ
                    )
                ).CQ;
        }
Exemplo n.º 9
0
 protected override LayeredApplication CreateNew(ApplicationValidationResultIQ validationResult, String name, String mode, String version, DictionaryQuery <CompositeModel, PublicCompositeTypeGenerationResult> loadingResults)
 {
     return(new LayeredApplicationImpl(this, this.CompositeModelTypeModelScopeSupports.Select(kvp => Tuple.Create(kvp.Key, (CompositeModelTypeModelScopeSupport)kvp.Value)), validationResult, loadingResults, name, mode, version));
 }
Exemplo n.º 10
0
 /// <summary>
 /// Creates new instance of <see cref="InvalidApplicationModelException"/>.
 /// </summary>
 /// <param name="validationResult">The <see cref="ApplicationValidationResultIQ"/> which contains validation errors prohibiting some functionality.</param>
 /// <param name="errorMsg">The additional error message.</param>
 public InvalidApplicationModelException(ApplicationValidationResultIQ validationResult, String errorMsg)
     : base(errorMsg + "\n" + validationResult)
 {
     this._validationResult = validationResult;
 }
 protected abstract TApplicationInstance CreateNew(ApplicationValidationResultIQ validationResult, String name, String mode, String version, DictionaryQuery <CompositeModel, PublicCompositeTypeGenerationResult> loadingResults);