/// <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); }
/// <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); }
/// <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); }
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)); }
/// <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); }
/// <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); }
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)); } }
/// <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); }