コード例 #1
0
        /// <summary>
        /// Carries out the registration against the container.
        /// </summary>
        /// <param name="builder"></param>
        /// <param name="type"></param>
        /// <param name="attribute"></param>
        /// <param name="builders"></param>
        protected virtual void Register(
            ContainerBuilder builder,
            Type type,
            IRegistrationRootAttribute attribute,
            IEnumerable <IRegistrationBuilderAttribute> builders)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }
            if (type == null)
            {
                throw new ArgumentNullException(nameof(type));
            }
            if (attribute == null)
            {
                throw new ArgumentNullException(nameof(attribute));
            }
            if (builders == null)
            {
                throw new ArgumentNullException(nameof(builders));
            }

            // root is itself a builder add it to builder list
            if (attribute is IRegistrationBuilderAttribute a)
            {
                builders = builders.Append(a);
            }

            // core registration method with final set of builders
            RegisterCore(builder, type, attribute, builders);
        }
コード例 #2
0
        /// <summary>
        /// Carries out the registration against the container and applies the builders.
        /// </summary>
        /// <param name="builder"></param>
        /// <param name="type"></param>
        /// <param name="attribute"></param>
        /// <param name="builders"></param>
        protected virtual void RegisterCore(
            ContainerBuilder builder,
            Type type,
            IRegistrationRootAttribute attribute,
            IEnumerable <IRegistrationBuilderAttribute> builders)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }
            if (type == null)
            {
                throw new ArgumentNullException(nameof(type));
            }
            if (attribute == null)
            {
                throw new ArgumentNullException(nameof(attribute));
            }
            if (builders == null)
            {
                throw new ArgumentNullException(nameof(builders));
            }

            if (type.GetTypeInfo().IsGenericType)
            {
                ApplyBuilders(type, builder.RegisterGeneric(type), attribute, builders);
            }
            else
            {
                ApplyBuilders(type, builder.RegisterType(type), attribute, builders);
            }
        }
コード例 #3
0
        /// <summary>
        /// Applies the detected set of builders.
        /// </summary>
        /// <typeparam name="TLimit"></typeparam>
        /// <typeparam name="TActivatorData"></typeparam>
        /// <typeparam name="TRegistrationStyle"></typeparam>
        /// <param name="type"></param>
        /// <param name="builder"></param>
        /// <param name="attribute"></param>
        /// <param name="builders"></param>
        /// <returns></returns>
        protected virtual IRegistrationBuilder <TLimit, TActivatorData, TRegistrationStyle> ApplyBuilders <TLimit, TActivatorData, TRegistrationStyle>(
            Type type,
            IRegistrationBuilder <TLimit, TActivatorData, TRegistrationStyle> builder,
            IRegistrationRootAttribute attribute,
            IEnumerable <IRegistrationBuilderAttribute> builders)
        {
            if (type == null)
            {
                throw new ArgumentNullException(nameof(type));
            }
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }
            if (attribute == null)
            {
                throw new ArgumentNullException(nameof(attribute));
            }
            if (builders == null)
            {
                throw new ArgumentNullException(nameof(builders));
            }

            // apply each builder in order
            foreach (var b in builders.Distinct())
            {
                builder = b.Build(type, builder);
            }

            return(builder);
        }
 protected override void RegisterCore(
     ContainerBuilder builder,
     Type type,
     IRegistrationRootAttribute attribute,
     IEnumerable <IRegistrationBuilderAttribute> builders)
 {
     if (attribute is RegisterConfigurationAttribute a)
     {
         ApplyBuilders(type, builder.RegisterConfigurationBinding(type, a.Path), attribute, builders);
     }
 }