示例#1
0
        /// <summary>
        /// Registers the application's tag helpers that in Simple Injector and instructs ASP.NET Core to let
        /// Simple Injector create those tag helpers.
        /// </summary>
        /// <param name="builder">The builder instance.</param>
        /// <param name="applicationTypeSelector">An optional predicate that instructs Simple Injector which
        /// tag helpers to register and construct and which tag helpers to be instructed by ASP.NET Core
        /// itself. When ommitted, Simple Injector will skip all tag helpers in the 'Microsoft.' namespace.
        /// </param>
        /// <returns>The supplied <paramref name="builder"/> instance.</returns>
        public static SimpleInjectorAspNetCoreBuilder AddTagHelperActivation(
            this SimpleInjectorAspNetCoreBuilder builder,
            Predicate <Type>?applicationTypeSelector = null)
        {
            if (builder is null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            // There are tag helpers OOTB in MVC. Letting the application container try to create them will
            // fail because of the dependencies these tag helpers have. This means that OOTB tag helpers need
            // to remain created by the framework's DefaultTagHelperActivator, hence the selector predicate.
            Predicate <Type> selector = applicationTypeSelector ??
                                        (type => !type.GetTypeInfo().Namespace.StartsWith("Microsoft"));

            var manager = GetApplicationPartManager(builder.Services, nameof(AddTagHelperActivation));

            builder.Container.RegisterTagHelpers(manager, selector);

            builder.Services.AddSingleton <ITagHelperActivator>(p => new SimpleInjectorTagHelperActivator(
                                                                    builder.Container,
                                                                    selector,
                                                                    new DefaultTagHelperActivator(p.GetRequiredService <ITypeActivatorCache>())));

            return(builder);
        }
示例#2
0
        /// <summary>
        /// Registers all application's controllers in Simple Injector and instructs ASP.NET Core to let
        /// Simple Injector create those controllers. Those controllers will be registered using the
        /// <see cref="Lifestyle.Transient"/> lifestyle, unless this is overridden using a custom
        /// <see cref="ContainerOptions.DefaultLifestyle">DefaultLifestyle</see> or by overriding the default
        /// <see cref="ContainerOptions.LifestyleSelectionBehavior">LifestyleSelectionBehavior</see>.
        /// </summary>
        /// <param name="builder">The builder instance.</param>
        /// <returns>The supplied <paramref name="builder"/> instance.</returns>
        public static SimpleInjectorAspNetCoreBuilder AddControllerActivation(
            this SimpleInjectorAspNetCoreBuilder builder)
        {
            Requires.IsNotNull(builder, nameof(builder));

            AddControllerActivationInternal(builder, lifestyle: null);

            return(builder);
        }
示例#3
0
        /// <summary>
        /// Registers all application's view components in Simple Injector and instructs ASP.NET Core to let
        /// Simple Injector create those view components.
        /// </summary>
        /// <param name="builder">The builder instance.</param>
        /// <returns>The supplied <paramref name="builder"/> instance.</returns>
        public static SimpleInjectorAspNetCoreBuilder AddViewComponentActivation(
            this SimpleInjectorAspNetCoreBuilder builder)
        {
            Requires.IsNotNull(builder, nameof(builder));

            RegisterViewComponentTypes(builder);

            builder.Services.AddSingleton <IViewComponentActivator>(
                new SimpleInjectorViewComponentActivator(builder.Container));

            return(builder);
        }
示例#4
0
        private static void AddControllerActivationInternal(
            SimpleInjectorAspNetCoreBuilder builder, Lifestyle?lifestyle)
        {
            ApplicationPartManager manager = GetApplicationPartManager(
                builder.Services,
                nameof(AddControllerActivation));

            RegisterMvcControllers(builder.Container, manager, lifestyle);

            builder.Services.AddSingleton <IControllerActivator>(
                new SimpleInjectorControllerActivator(builder.Container));
        }
示例#5
0
        /// <summary>
        /// Registers all application's view components in Simple Injector and instructs ASP.NET Core to let
        /// Simple Injector create those view components.
        /// </summary>
        /// <param name="builder">The builder instance.</param>
        /// <returns>The supplied <paramref name="builder"/> instance.</returns>
        public static SimpleInjectorAspNetCoreBuilder AddViewComponentActivation(
            this SimpleInjectorAspNetCoreBuilder builder)
        {
            if (builder is null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            RegisterViewComponentTypes(builder);

            builder.Services.AddSingleton <IViewComponentActivator>(
                new SimpleInjectorViewComponentActivator(builder.Container));

            return(builder);
        }
示例#6
0
        /// <summary>
        /// Registers all application's controllers in Simple Injector and instructs ASP.NET Core to let
        /// Simple Injector create those controllers.
        /// </summary>
        /// <param name="builder">The builder instance.</param>
        /// <returns>The supplied <paramref name="builder"/> instance.</returns>
        public static SimpleInjectorAspNetCoreBuilder AddControllerActivation(
            this SimpleInjectorAspNetCoreBuilder builder)
        {
            Requires.IsNotNull(builder, nameof(builder));

            ApplicationPartManager manager = GetApplicationPartManager(
                builder.Services,
                nameof(AddControllerActivation));

            RegisterMvcControllers(builder.Container, manager);

            builder.Services.AddSingleton <IControllerActivator>(
                new SimpleInjectorControllerActivator(builder.Container));

            return(builder);
        }
示例#7
0
        private static void RegisterViewComponentTypes(SimpleInjectorAspNetCoreBuilder builder)
        {
            var container = builder.Container;

            ApplicationPartManager manager = GetApplicationPartManager(
                builder.Services,
                nameof(AddViewComponentActivation));

            var feature = new ViewComponentFeature();

            manager.PopulateFeature(feature);
            var viewComponentTypes = feature.ViewComponents.Select(info => info.AsType());

            foreach (Type type in viewComponentTypes.ToArray())
            {
                container.AddRegistration(type, CreateConcreteRegistration(container, type));
            }
        }
示例#8
0
        /// <summary>
        /// Registers all application's page models in Simple Injector and instructs ASP.NET Core to let
        /// Simple Injector create those page models.
        /// </summary>
        /// <param name="builder">The builder instance.</param>
        /// <returns>The supplied <paramref name="builder"/> instance.</returns>
        public static SimpleInjectorAspNetCoreBuilder AddPageModelActivation(
            this SimpleInjectorAspNetCoreBuilder builder)
        {
            if (builder is null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            ApplicationPartManager manager =
                GetApplicationPartManager(builder.Services, nameof(AddPageModelActivation));

            RegisterPageModels(builder.Container, manager);

            builder.Services.AddSingleton <IPageModelActivatorProvider>(
                new SimpleInjectorPageModelActivatorProvider(builder.Container));

            return(builder);
        }