예제 #1
0
        /// <summary>
        /// Configures the component instance. This method should set <see cref="IApplicationComponent.IsConfigured"/>.
        /// </summary>
        /// <param name="applicationConfiguration">The application configuration.</param>
        /// <remarks>
        /// </remarks>
        public virtual void Configure(ApplicationConfigurationBase applicationConfiguration)
        {
            if (IsConfigured)
            {
                return;
            }

            applicationConfiguration.CompositionContainer.ComposeExportedValue <IManageAutoMapper>(this);

            var mappingConfigurations = applicationConfiguration.CompositionContainer.GetExportedValues <IConfigureAutoMapper>();

            Mapper.Initialize(c => mappingConfigurations
                              .OrderBy(mappingConfiguration => mappingConfiguration.Priority)
                              .ForEach(mappingConfiguration => mappingConfiguration.Configure(Configuration)));


            // Uncomment the following for AutoMapper >= version 4.
            //            _Configuration = new MapperConfiguration(c =>
            //            {
            //                mappingConfigurations
            //                    .OrderBy(mappingConfiguration => mappingConfiguration.Priority)
            //                    .ForEach(mappingConfiguration => mappingConfiguration.Configure(c));
            //            });

            _IsConfigured = true;
        }
예제 #2
0
        /// <summary>
        /// Configures the component instance.
        /// </summary>
        /// <param name="applicationConfiguration">The application configuration.</param>
        /// <remarks></remarks>
        public virtual void Configure(ApplicationConfigurationBase applicationConfiguration)
        {
            if (_IsConfigured)
            {
                return;
            }

            _Container = UnityContainerFactory.Create(
                _UnityConfiguration.ConfigurationFileName,
                _UnityConfiguration.ConfigurationSectionName,
                _UnityConfiguration.ContainerName);

            SetServiceLocator();
                
            applicationConfiguration.CompositionContainer.ComposeExportedValue<IManageUnity>(this);
            applicationConfiguration.CompositionContainer.ComposeExportedValue<IUnityContainer>(_Container);
            _Container.RegisterInstance<CompositionContainer>(applicationConfiguration.CompositionContainer);

            applicationConfiguration.CompositionContainer
                .GetExportedValues<IConfigureAUnityContainer>()
                .OrderBy(configurable => configurable.Priority)
                .ForEach(configurable => configurable.ConfigureContainer(_Container));
                
            _IsConfigured = true;
        }
예제 #3
0
        /// <summary>
        /// Configures the component instance.
        /// </summary>
        /// <param name="applicationConfiguration">The application configuration.</param>
        /// <remarks></remarks>
        public void Configure(ApplicationConfigurationBase applicationConfiguration)
        {
            if (!_IsConfigured)
            {
                applicationConfiguration.CompositionContainer.ComposeExportedValue <IManageCryptography>(this);

                _DefaultHashAlgorithm      = _CryptographyConfiguration.DefaultHashAlgorithm;
                _DefaultKeyedHashAlgorithm = _CryptographyConfiguration.DefaultKeyedHashAlgorithm;
                _DefaultSymmetricAlgorithm = _CryptographyConfiguration.DefaultSymmetricAlgorithm;

                _HashProvider = new Lazy <IProvideHashing>(
                    _CryptographyConfiguration.HashProviderFactory
                    ?? (() => new HashProvider(DefaultHashAlgorithm)));

                _KeyedHashProvider = new Lazy <IProvideKeyedHashing>(
                    _CryptographyConfiguration.KeyedHashProviderFactory
                    ?? (() => new KeyedHashProvider(DefaultKeyedHashAlgorithm)));

                _SymmetricEncryptionProvider = new Lazy <IProvideSymmetricEncryption>(
                    _CryptographyConfiguration.SymmetricEncryptionProviderFactory
                    ?? (() => new SymmetricEncryptionProvider(DefaultSymmetricAlgorithm)));

                _IsConfigured = true;
            }
        }
예제 #4
0
        /// <summary>
        /// Configures the component instance.
        /// </summary>
        /// <param name="applicationConfiguration">The application configuration.</param>
        /// <remarks></remarks>
        public virtual void Configure(ApplicationConfigurationBase applicationConfiguration)
        {
            if (IsConfigured)
            {
                return;
            }

            applicationConfiguration.CompositionContainer.ComposeExportedValue <IManageWebApi>(this);
            CompositionContainer = applicationConfiguration.CompositionContainer;

            if (!WebApiConfiguration.IsSelfHosted && WebApiConfiguration.AspNetHttpConfigurationDelegate != null)
            {
                WebApiConfiguration.AspNetHttpConfigurationDelegate.Invoke(HttpConfiguration);
            }

            var webApiConfigurations = _CompositionContainer.GetExportedValues <IConfigureWebApi>();

            foreach (var webApiConfiguration in webApiConfigurations)
            {
                webApiConfiguration.Configure(HttpConfiguration);
            }

            var routingConfigurations = _CompositionContainer.GetExportedValues <IConfigureHttpRouting>().OrderBy(c => c.Priority);

            foreach (var routingConfiguration in routingConfigurations)
            {
                routingConfiguration.Configure(this);
            }

            CreateRoutes();

            IsConfigured = true;
        }
예제 #5
0
        public void Configure(ApplicationConfigurationBase applicationConfiguration)
        {
            if (IsConfigured)
            {
                return;
            }

            // Compose app container
            var batch = new CompositionBatch();

            foreach (var entry in _Entries)
            {
                var entryType    = entry.GetType();
                var contractName = AttributedModelServices.GetContractName(entryType);
                var typeIdentity = AttributedModelServices.GetTypeIdentity(entryType);
                var metadata     = new Dictionary <string, object> {
                    { "ExportTypeIdentity", typeIdentity }
                };
                batch.AddExport(new Export(contractName, metadata, () => entry));
            }

            applicationConfiguration.CompositionContainer.Compose(batch);

            IsConfigured = true;
        }
예제 #6
0
        /// <summary>
        /// Configures the component instance.
        /// </summary>
        /// <param name="applicationConfiguration">The application configuration.</param>
        /// <remarks></remarks>
        public virtual void Configure(ApplicationConfigurationBase applicationConfiguration)
        {
            if (_IsConfigured)
            {
                return;
            }

            _Container = UnityContainerFactory.Create(
                _UnityConfiguration.ConfigurationFileName,
                _UnityConfiguration.ConfigurationSectionName,
                _UnityConfiguration.ContainerName);

            SetServiceLocator();

            applicationConfiguration.CompositionContainer.ComposeExportedValue <IManageUnity>(this);
            applicationConfiguration.CompositionContainer.ComposeExportedValue <IUnityContainer>(_Container);
            _Container.RegisterInstance <CompositionContainer>(applicationConfiguration.CompositionContainer);

            applicationConfiguration.CompositionContainer
            .GetExportedValues <IConfigureAUnityContainer>()
            .OrderBy(configurable => configurable.Priority)
            .ForEach(configurable => configurable.ConfigureContainer(_Container));

            _IsConfigured = true;
        }
예제 #7
0
        /// <summary>
        /// Configures the specified application configuration.
        /// </summary>
        /// <param name="applicationConfiguration">The application configuration.</param>
        public override void Configure(ApplicationConfigurationBase applicationConfiguration)
        {
            if (IsConfigured) return;

            applicationConfiguration.CompositionContainer.ComposeExportedValue<IManageWebApi>(this);
            CompositionContainer = applicationConfiguration.CompositionContainer;

            var webApiConfigurations = CompositionContainer.GetExportedValues<IConfigureWebApi>();
            foreach (var webApiConfiguration in webApiConfigurations)
            {
                webApiConfiguration.Configure(HttpConfiguration);
            }

            var routingConfigurations = CompositionContainer.GetExportedValues<IConfigureHttpRouting>().OrderBy(c => c.Priority);
            foreach (var routingConfiguration in routingConfigurations)
            {
                routingConfiguration.Configure(this);
            }

            CreateRoutes();

            var owinConfigurations = CompositionContainer.GetExportedValues<IConfigureOwin>().OrderBy(oc => oc.Priority);
            foreach (var owinConfiguration in owinConfigurations)
            {
                owinConfiguration.Configure(AppBuilder);
            }

            AppBuilder.UseWebApi(HttpConfiguration);

            IsConfigured = true;
        }
예제 #8
0
 /// <summary>
 /// Configures the component instance.
 /// </summary>
 /// <param name="applicationConfiguration">The application configuration.</param>
 /// <remarks></remarks>
 public virtual void Configure(ApplicationConfigurationBase applicationConfiguration)
 {
     if (!_IsConfigured)
     {
         applicationConfiguration.CompositionContainer.ComposeExportedValue <IManageSecurity>(this);
         _IsConfigured = true;
     }
 }
예제 #9
0
        public void Configure(ApplicationConfigurationBase applicationConfiguration)
        {
            if (IsConfigured)
            {
                return;
            }

            _IsConfigured = true;
        }
예제 #10
0
        /// <summary>
        /// Configures the component instance.
        /// </summary>
        /// <param name="applicationConfiguration">The application configuration.</param>
        /// <remarks></remarks>
        public virtual void Configure(ApplicationConfigurationBase applicationConfiguration)
        {
            if (_IsConfigured)
            {
                return;
            }

            applicationConfiguration.CompositionContainer.ComposeExportedValue <IManageCaching>(this);
            _IsConfigured = true;
        }
예제 #11
0
        /// <summary>
        /// Configures the component instance. This method should set <see cref="IsConfigured" />.
        /// </summary>
        /// <param name="applicationConfiguration">The application configuration.</param>
        public void Configure(ApplicationConfigurationBase applicationConfiguration)
        {
            if (_IsConfigured)
            {
                return;
            }

            applicationConfiguration.CompositionContainer.ComposeExportedValue <IManageEvents>(this);
            _CompositionContainer = applicationConfiguration.CompositionContainer;

            _IsConfigured = true;
        }
예제 #12
0
        /// <summary>
        /// Configures the component instance. This method should set <see cref="IsConfigured" />.
        /// </summary>
        /// <param name="applicationConfiguration">The application configuration.</param>
        public void Configure(ApplicationConfigurationBase applicationConfiguration)
        {
            if (_IsConfigured)
            {
                return;
            }

            applicationConfiguration.CompositionContainer.ComposeExportedValue <IManageEvents>(this);
            _CompositionContainer     = applicationConfiguration.CompositionContainer;
            _ConditionalEventHandlers = _CompositionContainer.GetExportTypesThatImplement <IConditionallyHandleEvents>().ToList();

            _IsConfigured = true;
        }
예제 #13
0
        /// <summary>
        /// Configures the component instance. This method should set <see cref="IsConfigured" />.
        /// </summary>
        /// <param name="applicationConfiguration">The application configuration.</param>
        public void Configure(ApplicationConfigurationBase applicationConfiguration)
        {
            if (_IsConfigured)
            {
                return;
            }

            applicationConfiguration.CompositionContainer.ComposeExportedValue <IManageLogging>(this);

            _LogTargets = new HashSet <ILogTarget>(_LoggingConfiguration.LogTargetFactories.Select(logTargetFactory => logTargetFactory.Value));
            _LogTargets.ForEach(logTarget => _Broadcast.LinkTo(logTarget, new DataflowLinkOptions(), logTarget.ShouldLog));

            _IsConfigured = true;
        }
예제 #14
0
        /// <summary>
        /// Configures the component instance. This method should set <see cref="IsConfigured" />.
        /// </summary>
        /// <param name="applicationConfiguration">The application configuration.</param>
        public void Configure(ApplicationConfigurationBase applicationConfiguration)
        {
            if (_IsConfigured)
            {
                return;
            }

            applicationConfiguration.CompositionContainer.ComposeExportedValue<IManageLogging>(this);

            _LogTargets = new HashSet<ILogTarget>(_LoggingConfiguration.LogTargetFactories.Select(logTargetFactory => logTargetFactory.Value));
            _LogTargets.ForEach(logTarget => _Broadcast.LinkTo(logTarget, new DataflowLinkOptions(), logTarget.ShouldLog));

            _IsConfigured = true;
        }
예제 #15
0
        /// <summary>
        /// Configures the component instance. This method should set <see cref="IApplicationComponent.IsConfigured"/>.
        /// </summary>
        /// <param name="applicationConfiguration">The application configuration.</param>
        /// <remarks>
        /// </remarks>
        public virtual void Configure(ApplicationConfigurationBase applicationConfiguration)
        {
            if (IsConfigured)
            {
                return;
            }

            applicationConfiguration.CompositionContainer.ComposeExportedValue<IManageAutoMapper>(this);

            var mappingConfigurations = applicationConfiguration.CompositionContainer.GetExportedValues<IConfigureAutoMapper>();
            mappingConfigurations.OrderBy(mappingConfiguration => mappingConfiguration.Priority)
                                 .ForEach(mappingConfiguration => mappingConfiguration.Configure(Configuration));

            _IsConfigured = true;
        }
예제 #16
0
        /// <summary>
        /// Configures the component instance. This method should set <see cref="IApplicationComponent.IsConfigured"/>.
        /// </summary>
        /// <param name="applicationConfiguration">The application configuration.</param>
        /// <remarks>
        /// </remarks>
        public virtual void Configure(ApplicationConfigurationBase applicationConfiguration)
        {
            if (IsConfigured)
            {
                return;
            }

            applicationConfiguration.CompositionContainer.ComposeExportedValue <IManageAutoMapper>(this);

            var mappingConfigurations = applicationConfiguration.CompositionContainer.GetExportedValues <IConfigureAutoMapper>();

            mappingConfigurations.OrderBy(mappingConfiguration => mappingConfiguration.Priority)
            .ForEach(mappingConfiguration => mappingConfiguration.Configure(Configuration));

            _IsConfigured = true;
        }
예제 #17
0
        /// <summary>
        /// Configures the component instance. This method should set <see cref="IApplicationComponent.IsConfigured"/>.
        /// </summary>
        /// <param name="applicationConfiguration">The application configuration.</param>
        /// <remarks>
        /// </remarks>
        public virtual void Configure(ApplicationConfigurationBase applicationConfiguration)
        {
            if (_IsConfigured)
            {
                return;
            }

            _Kernel = _Configuration.CreateKernel();

            applicationConfiguration.CompositionContainer.ComposeExportedValue<IKernel>(_Kernel);
            applicationConfiguration.CompositionContainer.ComposeExportedValue<IManageNinject>(this);
            _Kernel.Bind<CompositionContainer>().ToConstant(applicationConfiguration.CompositionContainer).InSingletonScope();

            applicationConfiguration.CompositionContainer
                                    .GetExportedValues<IConfigureANinjectKernel>()
                                    .OrderBy(configurable => configurable.Priority)
                                    .ForEach(configurable => configurable.ConfigureKernel(_Kernel));

            _IsConfigured = true;
        }
        public void Configure(ApplicationConfigurationBase applicationConfiguration)
        {
            if (IsConfigured)
                return;

            // Compose app container
            var batch = new CompositionBatch();
            foreach (var entry in _Entries)
            {
                var entryType = entry.GetType();
                var contractName = AttributedModelServices.GetContractName(entryType);
                var typeIdentity = AttributedModelServices.GetTypeIdentity(entryType);
                var metadata = new Dictionary<string, object> { { "ExportTypeIdentity", typeIdentity } };
                batch.AddExport(new Export(contractName, metadata, () => entry));
            }

            applicationConfiguration.CompositionContainer.Compose(batch);

            IsConfigured = true;
        }
예제 #19
0
        /// <summary>
        /// Configures the component instance. This method should set <see cref="IApplicationComponent.IsConfigured"/>.
        /// </summary>
        /// <param name="applicationConfiguration">The application configuration.</param>
        /// <remarks>
        /// </remarks>
        public virtual void Configure(ApplicationConfigurationBase applicationConfiguration)
        {
            if (_IsConfigured)
            {
                return;
            }

            _Kernel = _Configuration.CreateKernel();

            applicationConfiguration.CompositionContainer.ComposeExportedValue <IKernel>(_Kernel);
            applicationConfiguration.CompositionContainer.ComposeExportedValue <IManageNinject>(this);
            _Kernel.Bind <CompositionContainer>().ToConstant(applicationConfiguration.CompositionContainer).InSingletonScope();

            applicationConfiguration.CompositionContainer
            .GetExportedValues <IConfigureANinjectKernel>()
            .OrderBy(configurable => configurable.Priority)
            .ForEach(configurable => configurable.ConfigureKernel(_Kernel));

            _IsConfigured = true;
        }
예제 #20
0
        /// <summary>
        /// Configures the component instance. This method should set <see cref="IApplicationComponent.IsConfigured"/>.
        /// </summary>
        /// <param name="applicationConfiguration">The application configuration.</param>
        /// <remarks>
        /// </remarks>
        public virtual void Configure(ApplicationConfigurationBase applicationConfiguration)
        {
            if (_IsConfigured)
            {
                return;
            }

            _Container = _Configuration.CreateContainer(applicationConfiguration);

            applicationConfiguration.CompositionContainer.ComposeExportedValue <IContainer>(_Container);
            applicationConfiguration.CompositionContainer.ComposeExportedValue <DryIocManager>(this);
            Container.RegisterInstance <CompositionContainer>(applicationConfiguration.CompositionContainer, Reuse.Singleton);
            Container.RegisterDelegate(resolver => (IContainer)resolver, setup: Setup.With(allowDisposableTransient: true));

            applicationConfiguration.CompositionContainer
            .GetExportedValues <IConfigureDryIoc>()
            .OrderByDescending(configurable => configurable.Priority)
            .ForEach(configurable => configurable.ConfigureContainer(Container));

            _IsConfigured = true;
        }
예제 #21
0
        /// <summary>
        /// Configures the component instance. This method should set <see cref="IApplicationComponent.IsConfigured"/>.
        /// </summary>
        /// <param name="applicationConfiguration">The application configuration.</param>
        /// <remarks>
        /// </remarks>
        public virtual void Configure(ApplicationConfigurationBase applicationConfiguration)
        {
            if (_IsConfigured)
            {
                return;
            }

            _Container = _Configuration.CreateContainer(applicationConfiguration);

            applicationConfiguration.CompositionContainer.ComposeExportedValue<IContainer>(_Container);
            applicationConfiguration.CompositionContainer.ComposeExportedValue<DryIocManager>(this);
            Container.RegisterInstance<CompositionContainer>(applicationConfiguration.CompositionContainer, Reuse.Singleton);
            Container.RegisterDelegate(resolver => (IContainer)resolver, setup: Setup.With(allowDisposableTransient: true));
            
            applicationConfiguration.CompositionContainer
                .GetExportedValues<IConfigureDryIoc>()
                .OrderByDescending(configurable => configurable.Priority)
                .ForEach(configurable => configurable.ConfigureContainer(Container));

            _IsConfigured = true;
        }
예제 #22
0
        /// <summary>
        /// Configures the component instance. This method should set <see cref="IApplicationComponent.IsConfigured"/>.
        /// </summary>
        /// <param name="applicationConfiguration">The application configuration.</param>
        /// <remarks>
        /// </remarks>
        public virtual void Configure(ApplicationConfigurationBase applicationConfiguration)
        {
            if (IsConfigured)
            {
                return;
            }

            applicationConfiguration.CompositionContainer.ComposeExportedValue <IManageAutoMapper>(this);
            var mappingConfigurations = applicationConfiguration.CompositionContainer.GetExportedValues <IConfigureAutoMapper>();

            _ConfigurationProvder = new MapperConfiguration(c =>
            {
                ConfigureMappings(c, mappingConfigurations);
            });
            _Mapper = _ConfigurationProvder.CreateMapper();

            Initialize(c =>
            {
                ConfigureMappings(c, mappingConfigurations);
            });

            _IsConfigured = true;
        }
예제 #23
0
        /// <summary>
        /// Configures the component instance. This method should set <see cref="IApplicationComponent.IsConfigured"/>.
        /// </summary>
        /// <param name="applicationConfiguration">The application configuration.</param>
        /// <remarks>
        /// </remarks>
        public virtual void Configure(ApplicationConfigurationBase applicationConfiguration)
        {
            if (IsConfigured)
                return;

            applicationConfiguration.CompositionContainer.ComposeExportedValue<IManageAutoMapper>(this);
            
            var mappingConfigurations = applicationConfiguration.CompositionContainer.GetExportedValues<IConfigureAutoMapper>();
            Mapper.Initialize(c => mappingConfigurations
                .OrderBy(mappingConfiguration => mappingConfiguration.Priority)
                .ForEach(mappingConfiguration => mappingConfiguration.Configure(Configuration)));
            

            // Uncomment the following for AutoMapper >= version 4.
            //            _Configuration = new MapperConfiguration(c =>
            //            {
            //                mappingConfigurations
            //                    .OrderBy(mappingConfiguration => mappingConfiguration.Priority)
            //                    .ForEach(mappingConfiguration => mappingConfiguration.Configure(c));
            //            });

            _IsConfigured = true;
        }
예제 #24
0
        /// <summary>
        /// Configures the component instance.
        /// </summary>
        /// <param name="applicationConfiguration">The application configuration.</param>
        /// <remarks></remarks>
        public virtual void Configure(ApplicationConfigurationBase applicationConfiguration)
        {
            if (IsConfigured)
            {
                return;
            }

            applicationConfiguration.CompositionContainer.ComposeExportedValue <IManageWebApi>(this);

            HttpConfiguration = _WebApiConfiguration.HttpConfigurationFactory();

            var webApiConfigurations = applicationConfiguration.CompositionContainer.GetExportedValues <IConfigureWebApi>();

            foreach (var webApiConfiguration in webApiConfigurations)
            {
                webApiConfiguration.Configure(HttpConfiguration);
            }

            var routingConfigurations = applicationConfiguration.CompositionContainer.GetExportedValues <IConfigureHttpRouting>().OrderBy(c => c.Priority);

            foreach (var routingConfiguration in routingConfigurations)
            {
                routingConfiguration.Configure(this);
            }

            _HttpRoutes.ForEach(
                route =>
            {
                HttpConfiguration
                .Routes
                .MapHttpRoute(route.RouteName, route.RouteTemplate, route.Defaults, route.Constraints);
            });

            _WebApiConfiguration.HostConfigurationAction();

            IsConfigured = true;
        }
예제 #25
0
        /// <summary>
        /// Configures the specified application configuration.
        /// </summary>
        /// <param name="applicationConfiguration">The application configuration.</param>
        public override void Configure(ApplicationConfigurationBase applicationConfiguration)
        {
            if (IsConfigured)
            {
                return;
            }

            applicationConfiguration.CompositionContainer.ComposeExportedValue <IManageWebApi>(this);
            CompositionContainer = applicationConfiguration.CompositionContainer;

            var webApiConfigurations = CompositionContainer.GetExportedValues <IConfigureWebApi>();

            foreach (var webApiConfiguration in webApiConfigurations)
            {
                webApiConfiguration.Configure(HttpConfiguration);
            }

            var routingConfigurations = CompositionContainer.GetExportedValues <IConfigureHttpRouting>().OrderBy(c => c.Priority);

            foreach (var routingConfiguration in routingConfigurations)
            {
                routingConfiguration.Configure(this);
            }

            CreateRoutes();

            var owinConfigurations = CompositionContainer.GetExportedValues <IConfigureOwin>().OrderBy(oc => oc.Priority);

            foreach (var owinConfiguration in owinConfigurations)
            {
                owinConfiguration.Configure(AppBuilder);
            }

            AppBuilder.UseWebApi(HttpConfiguration);

            IsConfigured = true;
        }
예제 #26
0
 /// <summary>
 /// Creates the <see cref="IContainer"/> instance.
 /// </summary>
 /// <returns>Instance of <see cref="IContainer"/>.</returns>
 /// <remarks></remarks>
 public virtual IContainer CreateContainer(ApplicationConfigurationBase applicationConfiguration)
 {
     return _ContainerFactory.Invoke(applicationConfiguration);
 }
예제 #27
0
        /// <summary>
        /// Configures the component instance.
        /// </summary>
        /// <param name="applicationConfiguration">The application configuration.</param>
        /// <remarks></remarks>
        public virtual void Configure(ApplicationConfigurationBase applicationConfiguration)
        {
            if (IsConfigured) return;

            applicationConfiguration.CompositionContainer.ComposeExportedValue<IManageWebApi>(this);

            HttpConfiguration = _WebApiConfiguration.HttpConfigurationFactory();
            
            var webApiConfigurations = applicationConfiguration.CompositionContainer.GetExportedValues<IConfigureWebApi>();
            foreach (var webApiConfiguration in webApiConfigurations)
            {
                webApiConfiguration.Configure(HttpConfiguration);
            }

            var routingConfigurations = applicationConfiguration.CompositionContainer.GetExportedValues<IConfigureHttpRouting>().OrderBy(c => c.Priority);
            foreach (var routingConfiguration in routingConfigurations)
            {
                routingConfiguration.Configure(this);
            }

            _HttpRoutes.ForEach(
                route =>
                {
                    HttpConfiguration
                        .Routes
                        .MapHttpRoute(route.RouteName, route.RouteTemplate, route.Defaults, route.Constraints);
                });

            _WebApiConfiguration.HostConfigurationAction();

            IsConfigured = true;
        }
예제 #28
0
        public void Configure(ApplicationConfigurationBase applicationConfiguration)
        {
            if (IsConfigured)
            {
                return;
            }

            var serverConfiguration = new ScimServerConfiguration();

            applicationConfiguration.CompositionContainer.ComposeExportedValue(serverConfiguration);

            // configure appBuilder middleware
            AppBuilder.Use <ExceptionHandlerMiddleware>(); // global exception handler for returning SCIM-formatted messages
            AppBuilder.Use((context, task) =>
            {
                AmbientRequestService.SetRequestInformation(context, serverConfiguration);

                return(task.Invoke());
            });

            // discover and register all type definitions
            var versionedSchemaTypes = new Dictionary <ScimVersion, IList <Type> >
            {
                { ScimVersion.One, new List <Type>() },
                { ScimVersion.Two, new List <Type>() }
            };

            var typeDefinitions = applicationConfiguration.CompositionContainer.GetExportTypesThatImplement <IScimTypeDefinition>();

            foreach (var typeDefinition in typeDefinitions)
            {
                Type distinctTypeDefinition;
                var  typeDefinitionTarget = GetTargetDefinitionType(typeDefinition); // the type of object being defined (e.g. User, Group, Name)
                if (serverConfiguration.TypeDefinitionRegistry.TryGetValue(typeDefinitionTarget, out distinctTypeDefinition))
                {
                    // already have a definition registered for the target type
                    // let's favor non-Owin.Scim definitions over built-in defaults
                    if (distinctTypeDefinition.Assembly.FullName.StartsWith(BuiltInAssemblyNamePrefix) &&
                        !typeDefinition.Assembly.FullName.StartsWith(BuiltInAssemblyNamePrefix))
                    {
                        serverConfiguration.TypeDefinitionRegistry[typeDefinitionTarget] = typeDefinition;
                    }

                    continue;
                }

                // register type definition
                if (typeof(IScimSchemaTypeDefinition).IsAssignableFrom(typeDefinition))
                {
                    var targetVersion = typeDefinitionTarget.Namespace.GetScimVersion() ?? serverConfiguration.DefaultScimVersion;
                    versionedSchemaTypes[targetVersion].Add(typeDefinitionTarget);
                }

                serverConfiguration.TypeDefinitionRegistry[typeDefinitionTarget] = typeDefinition;
            }

            serverConfiguration.SchemaTypeVersionCache = versionedSchemaTypes;

            // instantiate an instance of each type definition and add it to configuration
            // type definitions MAY instantiate new type definitions themselves during attribute definition composition
            var enumerator = serverConfiguration.TypeDefinitionRegistry.Values.GetEnumerator();

            while (enumerator.MoveNext())
            {
                // creating type definitions may be expensive due to reflection
                // when a type definition is instantiated, it may implicitly instantiate/register other type
                // definitions for complex attributes, therefore, no need to re-create the same definition more than once
                if (serverConfiguration.ContainsTypeDefinition(enumerator.Current))
                {
                    continue;
                }

                var typeDefinition = (IScimTypeDefinition)enumerator.Current.CreateInstance(serverConfiguration);
                serverConfiguration.AddTypeDefiniton(typeDefinition);
            }

            // define a new HttpConfiguration
            var httpConfiguration = serverConfiguration.HttpConfiguration = new HttpConfiguration();

            // invoke custom configuration action if not null
            if (_ConfigureScimServerAction != null)
            {
                _ConfigureScimServerAction.Invoke(serverConfiguration);
            }

            // register any optional middleware
            if (serverConfiguration.RequireSsl)
            {
                AppBuilder.Use <RequireSslMiddleware>();
            }

            // create a DryIoC container with an optional fallback dependency resolver if one has been specified
            if (serverConfiguration.DependencyResolver != null)
            {
                Container = new Container(
                    rules =>
                    rules.WithoutThrowIfDependencyHasShorterReuseLifespan()
                    .WithUnknownServiceResolvers(request =>
                {
                    var shouldResolve = _TypeResolverCache.GetOrAdd(
                        request.ServiceType,
                        type =>
                        _CompositionConstraints.Any(
                            constraint =>
                            constraint(new FileInfo(type.Assembly.Location))));

                    if (!shouldResolve)
                    {
                        return(null);
                    }

                    return(new DelegateFactory(
                               resolver =>
                               serverConfiguration.DependencyResolver.Resolve(request.ServiceType)));
                }),
                    new AsyncExecutionFlowScopeContext());
            }
            else
            {
                Container = new Container(
                    rules => rules.WithoutThrowIfDependencyHasShorterReuseLifespan(),
                    new AsyncExecutionFlowScopeContext());
            }

            // Configure http configuration for SCIM
            ConfigureHttpConfiguration(serverConfiguration);

            // Register our ScimServerConfiguration as a singleton
            Container.RegisterInstance(serverConfiguration, Reuse.Singleton);

            Container.WithWebApi(httpConfiguration);
            AppBuilder.UseWebApi(httpConfiguration);

            IsConfigured = true;
        }
예제 #29
0
        /// <summary>
        /// Configures the component instance.
        /// </summary>
        /// <param name="applicationConfiguration">The application configuration.</param>
        /// <remarks></remarks>
        public virtual void Configure(ApplicationConfigurationBase applicationConfiguration)
        {
            if (IsConfigured) return;

            applicationConfiguration.CompositionContainer.ComposeExportedValue<IManageWebApi>(this);
            CompositionContainer = applicationConfiguration.CompositionContainer;

            if (!WebApiConfiguration.IsSelfHosted && WebApiConfiguration.AspNetHttpConfigurationDelegate != null)
            {
                WebApiConfiguration.AspNetHttpConfigurationDelegate.Invoke(HttpConfiguration);
            }

            var webApiConfigurations = _CompositionContainer.GetExportedValues<IConfigureWebApi>();
            foreach (var webApiConfiguration in webApiConfigurations)
            {
                webApiConfiguration.Configure(HttpConfiguration);
            }

            var routingConfigurations = _CompositionContainer.GetExportedValues<IConfigureHttpRouting>().OrderBy(c => c.Priority);
            foreach (var routingConfiguration in routingConfigurations)
            {
                routingConfiguration.Configure(this);
            }

            CreateRoutes();
            
            IsConfigured = true;
        }
예제 #30
0
        /// <summary>
        /// Configures the component instance. This method should set <see cref="IsConfigured" />.
        /// </summary>
        /// <param name="applicationConfiguration">The application configuration.</param>
        public void Configure(ApplicationConfigurationBase applicationConfiguration)
        {
            if (_IsConfigured)
            {
                return;
            }

            applicationConfiguration.CompositionContainer.ComposeExportedValue<IManageEvents>(this);
            _CompositionContainer = applicationConfiguration.CompositionContainer;

            _IsConfigured = true;
        }
예제 #31
0
 /// <summary>
 /// Creates the <see cref="IContainer"/> instance.
 /// </summary>
 /// <returns>Instance of <see cref="IContainer"/>.</returns>
 /// <remarks></remarks>
 public virtual IContainer CreateContainer(ApplicationConfigurationBase applicationConfiguration)
 {
     return(_ContainerFactory.Invoke(applicationConfiguration));
 }
예제 #32
0
        /// <summary>
        /// Configures the component instance.
        /// </summary>
        /// <param name="applicationConfiguration">The application configuration.</param>
        /// <remarks></remarks>
        public void Configure(ApplicationConfigurationBase applicationConfiguration)
        {
            if (!_IsConfigured)
            {
                applicationConfiguration.CompositionContainer.ComposeExportedValue<IManageCryptography>(this);

                _DefaultHashAlgorithm = _CryptographyConfiguration.DefaultHashAlgorithm;
                _DefaultKeyedHashAlgorithm = _CryptographyConfiguration.DefaultKeyedHashAlgorithm;
                _DefaultSymmetricAlgorithm = _CryptographyConfiguration.DefaultSymmetricAlgorithm;

                _HashProvider = new Lazy<IProvideHashing>(
                    _CryptographyConfiguration.HashProviderFactory 
                        ?? (() => new HashProvider(DefaultHashAlgorithm)));

                _KeyedHashProvider = new Lazy<IProvideKeyedHashing>(
                    _CryptographyConfiguration.KeyedHashProviderFactory 
                        ?? (() => new KeyedHashProvider(DefaultKeyedHashAlgorithm)));

                _SymmetricEncryptionProvider = new Lazy<IProvideSymmetricEncryption>(
                    _CryptographyConfiguration.SymmetricEncryptionProviderFactory 
                        ?? (() => new SymmetricEncryptionProvider(DefaultSymmetricAlgorithm)));

                _IsConfigured = true;
            }
        }
예제 #33
0
        public void Configure(ApplicationConfigurationBase applicationConfiguration)
        {
            if (IsConfigured)
                return;

            var serverConfiguration = new ScimServerConfiguration();
            applicationConfiguration.CompositionContainer.ComposeExportedValue(serverConfiguration);
            
            // configure appBuilder middleware
            AppBuilder.Use<ExceptionHandlerMiddleware>(); // global exception handler for returning SCIM-formatted messages
            AppBuilder.Use((context, task) =>
            {
                AmbientRequestService.SetRequestInformation(context, serverConfiguration);

                return task.Invoke();
            });

            // discover and register all type definitions
            var versionedSchemaTypes = new Dictionary<ScimVersion, IList<Type>>
            {
                { ScimVersion.One, new List<Type>() },
                { ScimVersion.Two, new List<Type>() }
            };

            var typeDefinitions = applicationConfiguration.CompositionContainer.GetExportTypesThatImplement<IScimTypeDefinition>();
            foreach (var typeDefinition in typeDefinitions)
            {
                Type distinctTypeDefinition;
                var typeDefinitionTarget = GetTargetDefinitionType(typeDefinition); // the type of object being defined (e.g. User, Group, Name)
                if (serverConfiguration.TypeDefinitionRegistry.TryGetValue(typeDefinitionTarget, out distinctTypeDefinition))
                {
                    // already have a definition registered for the target type
                    // let's favor non-Owin.Scim definitions over built-in defaults
                    if (distinctTypeDefinition.Assembly.FullName.StartsWith(BuiltInAssemblyNamePrefix) &&
                        !typeDefinition.Assembly.FullName.StartsWith(BuiltInAssemblyNamePrefix))
                    {
                        serverConfiguration.TypeDefinitionRegistry[typeDefinitionTarget] = typeDefinition;
                    }

                    continue;
                }

                // register type definition
                if (typeof(IScimSchemaTypeDefinition).IsAssignableFrom(typeDefinition))
                {
                    var targetVersion = typeDefinitionTarget.Namespace.GetScimVersion() ?? serverConfiguration.DefaultScimVersion;
                    versionedSchemaTypes[targetVersion].Add(typeDefinitionTarget);
                }

                serverConfiguration.TypeDefinitionRegistry[typeDefinitionTarget] = typeDefinition;
            }

            serverConfiguration.SchemaTypeVersionCache = versionedSchemaTypes;

            // instantiate an instance of each type definition and add it to configuration
            // type definitions MAY instantiate new type definitions themselves during attribute definition composition
            var enumerator = serverConfiguration.TypeDefinitionRegistry.Values.GetEnumerator();
            while (enumerator.MoveNext())
            {
                // creating type definitions may be expensive due to reflection
                // when a type definition is instantiated, it may implicitly instantiate/register other type 
                // definitions for complex attributes, therefore, no need to re-create the same definition more than once
                if (serverConfiguration.ContainsTypeDefinition(enumerator.Current))
                    continue;

                var typeDefinition = (IScimTypeDefinition)enumerator.Current.CreateInstance(serverConfiguration);
                serverConfiguration.AddTypeDefiniton(typeDefinition);
            }

            // define a new HttpConfiguration
            var httpConfiguration = serverConfiguration.HttpConfiguration = new HttpConfiguration();

            // invoke custom configuration action if not null
            if (_ConfigureScimServerAction != null)
                _ConfigureScimServerAction.Invoke(serverConfiguration);

            // register any optional middleware
            if (serverConfiguration.RequireSsl)
                AppBuilder.Use<RequireSslMiddleware>();

            // create a DryIoC container with an optional fallback dependency resolver if one has been specified
            if (serverConfiguration.DependencyResolver != null)
            {
                Container = new Container(
                    rules =>
                        rules.WithoutThrowIfDependencyHasShorterReuseLifespan()
                            .WithUnknownServiceResolvers(request =>
                            {
                                var shouldResolve = _TypeResolverCache.GetOrAdd(
                                    request.ServiceType,
                                    type =>
                                        _CompositionConstraints.Any(
                                            constraint =>
                                                constraint(new FileInfo(type.Assembly.Location))));

                                if (!shouldResolve)
                                    return null;

                                return new DelegateFactory(
                                    resolver =>
                                        serverConfiguration.DependencyResolver.Resolve(request.ServiceType));
                            }),
                    new AsyncExecutionFlowScopeContext());
            }
            else
            {
                Container = new Container(
                    rules => rules.WithoutThrowIfDependencyHasShorterReuseLifespan(),
                    new AsyncExecutionFlowScopeContext());
            }

            // Configure http configuration for SCIM
            ConfigureHttpConfiguration(serverConfiguration);

            // Register our ScimServerConfiguration as a singleton
            Container.RegisterInstance(serverConfiguration, Reuse.Singleton);

            Container.WithWebApi(httpConfiguration);
            AppBuilder.UseWebApi(httpConfiguration);

            IsConfigured = true;
        }