protected override IServiceProvider CreateServiceProvider(IServiceCollection serviceCollection)
        {
            var factory   = new WindsorServiceProviderFactory();
            var container = factory.CreateBuilder(serviceCollection);

            return(factory.CreateServiceProvider(container));
        }
        public async Task Should_resolve_dependencies_from_serviceprovider()
        {
            IWindsorContainer container       = null;
            IServiceProvider  serviceProvider = null;

            var context = await Scenario.Define <Context>()
                          .WithEndpoint <EndpointWithExternallyManagedContainer>(endpointBuilder =>
            {
                var serviceCollection = new ServiceCollection();
                // register service using the IServiceCollection API:
                serviceCollection.AddSingleton <ServiceCollectionService>();

                // register service using the NServiceBus container API:
                endpointBuilder.CustomConfig(endpointConfiguration => endpointConfiguration
                                             .RegisterComponents(c => c
                                                                 .RegisterSingleton(new InternalApiService())));

                endpointBuilder.ToCreateInstance(
                    configuration => Task.FromResult(EndpointWithExternallyManagedServiceProvider
                                                     .Create(configuration, serviceCollection)),
                    startableEndpoint =>
                {
                    var windsorFactory = new WindsorServiceProviderFactory();
                    container          = windsorFactory.CreateBuilder(serviceCollection);
                    // register service using the container native API:
                    container.Register(Component.For <NativeApiService>().LifeStyle.Singleton);

                    serviceProvider = windsorFactory.CreateServiceProvider(container);
                    return(startableEndpoint.Start(serviceProvider));
                });

                endpointBuilder.When(session => session.SendLocal(new TestMessage()));
            })
                          .Done(c => c.InjectedInternalApiService != null)
                          .Run();

            Assert.AreSame(context.InjectedNativeApiService, container.Resolve <NativeApiService>());
            Assert.AreSame(context.InjectedNativeApiService, serviceProvider.GetService <NativeApiService>());
            Assert.AreSame(context.InjectedInternalApiService, container.Resolve <InternalApiService>());
            Assert.AreSame(context.InjectedInternalApiService, serviceProvider.GetService <InternalApiService>());
            Assert.AreSame(context.InjectedServiceCollectionService, container.Resolve <ServiceCollectionService>());
            Assert.AreSame(context.InjectedServiceCollectionService, serviceProvider.GetService <ServiceCollectionService>());
        }
示例#3
0
        public static IWindsorContainer CreateContainer(this IServiceCollection serviceCollection, WindsorServiceProviderFactory factory)
        {
            var container = new WindsorContainer();

            container.Kernel.AddSubSystem(
                SubSystemConstants.NamingKey,
                new SubSystems.DependencyInjectionNamingSubsystem()
                );

            if (serviceCollection == null)
            {
                return(container);
            }

            container.Register(
                Component
                .For <IWindsorContainer>()
                .Instance(container),
                Component
                .For <IServiceProvider, ISupportRequiredService>()
                .ImplementedBy <WindsorScopedServiceProvider>()
                .LifeStyle.ScopedToNetServiceScope(),
                Component
                .For <IServiceScopeFactory>()
                .ImplementedBy <WindsorScopeFactory>()
                .LifestyleSingleton(),
                Component
                .For <WindsorServiceProviderFactory>()
                .Instance(factory)
                .LifestyleSingleton()
                );

            container.Kernel.Resolver.AddSubResolver(new RegisteredCollectionResolver(container.Kernel));
            container.Kernel.Resolver.AddSubResolver(new OptionsSubResolver(container.Kernel));
            container.Kernel.Resolver.AddSubResolver(new LoggerDependencyResolver(container.Kernel));

            foreach (var service in serviceCollection)
            {
                container.Register(service.CreateWindsorRegistration());
            }

            return(container);
        }