예제 #1
0
        /// <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));
        }