/// <summary>
        /// Registers <see cref="IModelMetadataConfiguration"/> classes in IoC
        /// </summary>
        /// <param name="forTypesInAssembly">Assemblies to scan for <see cref="IModelMetadataConfiguration"/> implementations</param>
        /// <param name="registerFoundConfiguration">
        /// Register configuration via IoC container.
        /// <br/>
        /// ------------
        /// <br/><b>Example:</b>
        /// <br/>---<br/>
        /// <br/>Autofac:<br/>
        /// .RegisterConfigurationsWithContainer(r => container.RegisterType(r.MetadataConfigurationType).As(r.InterfaceType))
        /// <br/>---<br/>
        /// Windsor:<br/>
        /// .RegisterConfigurationsWithContainer(r => container.Register(Component.For(r.InterfaceType).ImplementedBy(r.MetadataConfigurationType).LifeStyle.Transient))
        /// </param>
        /// <returns></returns>
        public static ModelMetadataRegistrar RegisterEachConfigurationWithContainer([NotNull] IEnumerable <Assembly> forTypesInAssembly, [NotNull] Action <ConfigurationsScanResult> registerFoundConfiguration)
        {
            Invariant.IsNotNull(forTypesInAssembly, "forTypesInAssembly");
            Invariant.IsNotNull(registerFoundConfiguration, "registerConfigurationWithIoC");

            ConfigurationsScanner
            .GetMetadataClasses(forTypesInAssembly)
            .ForEach(registerFoundConfiguration);
            registredWithContainer = true;
            return(Registrar);
        }
Esempio n. 2
0
        /// <summary>
        /// Executes the task. Returns continuation of the next task(s) in the chain.
        /// </summary>
        /// <returns></returns>
        public override TaskContinuation Execute()
        {
            var assemblies = Container.GetService <IBuildManager>().Assemblies;

            ConfigurationsScanner
            .GetMetadataClasses(assemblies)
            .ForEach(r => Container.RegisterAsTransient(r.InterfaceType, r.MetadataConfigurationType));
            FluentMetadataConfiguration
            .ConstructMetadataUsing(() => Container.GetServices <IModelMetadataConfiguration>())
            .Register();
            return(TaskContinuation.Continue);
        }
        /// <summary>
        /// Registers metadata provider and model metadata configuration classes
        /// </summary>
        public static void Register()
        {
            if (!Registrar.ConfigurationFactoryDefined)
            {
                if (registredWithContainer)
                {
                    ConstructMetadataUsingDependencyResolver();
                }
                else
                {
                    Registrar.ConstructMetadataUsing(
                        () =>
                        ConfigurationsScanner
                        .GetMetadataClasses(From.AllAssemblies())
                        .Select(s => (IModelMetadataConfiguration)Activator.CreateInstance(s.MetadataConfigurationType)));
                }
            }

            Registrar.Register();
        }