/// <summary> /// Adds the SimpleInjector implementation of XPike dependency injection. /// </summary> /// <param name="services">This instance of IServiceCollection.</param> /// <param name="options">SimpleInjector options. If omitted, configures SimpleInjector for AspNetCore and controller activation.</param> /// <returns>An insance of <see cref="IDependencyCollection"/>.</returns> /// <remarks> /// See https://simpleinjector.readthedocs.io/en/latest/aspnetintegration.html /// </remarks> public static IDependencyCollection AddXPikeDependencyInjection(this IServiceCollection services, Action <IDependencyProvider> configureProvider = null, Action <SimpleInjectorAddOptions> options = null) { var dependencyCollection = new SimpleInjectorDependencyCollection(); var provider = new SimpleInjectorDependencyProvider(dependencyCollection.Container); services.AddSingleton <Container>(dependencyCollection.Container); services.AddSingleton <IDependencyCollection>(dependencyCollection); services.AddSingleton <IDependencyProvider>(provider); services.AddSingleton <IServiceCollection>(services); dependencyCollection.Container.Options.AllowOverridingRegistrations = false; if (options == null) { options = (o) => { o.AddAspNetCore() .AddControllerActivation(); }; } services.AddSimpleInjector(dependencyCollection.Container, options); dependencyCollection.Container.Options.AllowOverridingRegistrations = true; dependencyCollection.RegisterSingleton <IDependencyCollection>(dependencyCollection); dependencyCollection.RegisterSingleton <IDependencyProvider>(provider); services.AddSingleton <IStartupFilter, StartupFilter>(_ => new StartupFilter(configureProvider)); return(dependencyCollection); }
public void BeginScope_should_return_IDisposable() { IDependencyCollection collection = new SimpleInjectorDependencyCollection(); IDependencyProvider provider = collection.BuildDependencyProvider(); using (var scope = provider.BeginScope()) { Assert.IsNotNull(scope); } }
public void Scope_should_default_to_AsyncScopedLifestyle() { SimpleInjectorDependencyCollection collection = new SimpleInjectorDependencyCollection(); Assert.IsInstanceOfType(collection.Container.Options.DefaultScopedLifestyle, typeof(AsyncScopedLifestyle)); }