/// <summary> /// Finalizes the configuration of Simple Injector on top of <see cref="IServiceCollection"/>. Will /// ensure framework components can be injected into Simple Injector-resolved components, unless /// <see cref="SimpleInjectorUseOptions.AutoCrossWireFrameworkComponents"/> is set to <c>false</c> /// using the <paramref name="setupAction"/>. /// </summary> /// <param name="provider">The application's <see cref="IServiceProvider"/>.</param> /// <param name="container">The application's <see cref="Container"/> instance.</param> /// <param name="setupAction">An optional setup action.</param> /// <returns>The supplied <paramref name="provider"/>.</returns> /// <exception cref="ArgumentNullException">Thrown when <paramref name="provider"/> or /// <paramref name="container"/> are null references.</exception> //// I wanted to add this obsolete message in 4.8, but it was confusing considering the obsolete //// messages for everything on top of SimpleInjectorUseOptions. When those obsolete messages are //// resolved by the user, there is no harm in calling this method any longer. So it will get //// obsoleted in a later release. ////[Obsolete( //// "You are supplying a setup action, but due breaking changes in ASP.NET Core 3, the Simple " + //// "Injector container can get locked at an earlier stage, making it impossible to further setup " + //// "the container at this stage. Please call the UseSimpleInjector(IServiceProvider, Container) " + //// "overload instead. Take a look at the compiler warnings on the individual methods you are " + //// "calling inside your setupAction delegate to understand how to migrate them. " + //// " For more information, see: https://simpleinjector.org/aspnetcore. " + //// "Will be treated as an error from version 4.10. Will be removed in version 5.0.", //// error: false)] public static IServiceProvider UseSimpleInjector( this IServiceProvider provider, Container container, Action <SimpleInjectorUseOptions>?setupAction) { if (provider is null) { throw new ArgumentNullException(nameof(provider)); } if (container is null) { throw new ArgumentNullException(nameof(container)); } SimpleInjectorAddOptions addOptions = GetOptions(container); addOptions.SetServiceProviderIfNull(provider); var useOptions = new SimpleInjectorUseOptions(addOptions, provider); setupAction?.Invoke(useOptions); return(provider); }
private static void HookAspNetCoreHostHostedServiceServiceProviderInitialization( SimpleInjectorAddOptions options) { // ASP.NET Core 3's new Host class resolves hosted services much earlier in the pipeline. This // registration ensures that the IServiceProvider is assigned before such resolve takes place, // to ensure that that hosted service can be injected with cross-wired dependencies. options.Services.AddSingleton <IHostedService>(provider => { options.SetServiceProviderIfNull(provider); // We can't return null here, so we return an empty implementation. return(new NullSimpleInjectorHostedService()); }); }
/// <summary> /// Finalizes the configuration of Simple Injector on top of <see cref="IServiceCollection"/>. Will /// ensure framework components can be injected into Simple Injector-resolved components, unless /// <see cref="SimpleInjectorAddOptions.AutoCrossWireFrameworkComponents"/> is set to <c>false</c>. /// </summary> /// <param name="provider">The application's <see cref="IServiceProvider"/>.</param> /// <param name="container">The application's <see cref="Container"/> instance.</param> /// <returns>The supplied <paramref name="provider"/>.</returns> /// <exception cref="ArgumentNullException">Thrown when <paramref name="provider"/> or /// <paramref name="container"/> are null references.</exception> public static IServiceProvider UseSimpleInjector(this IServiceProvider provider, Container container) { if (provider is null) { throw new ArgumentNullException(nameof(provider)); } if (container is null) { throw new ArgumentNullException(nameof(container)); } SimpleInjectorAddOptions addOptions = GetOptions(container); addOptions.SetServiceProviderIfNull(provider); return(provider); }