protected override IServiceProvider CreateServiceProvider()
        {
            if (ownContainer)
            {
                container = new UnityContainer();
            }

            var wrapper = new ServiceProviderWrapper(container, ownContainer);

            container.RegisterInstance <IServiceProvider>(wrapper);

            if (!container.IsRegistered <IUnityContainer>())
            {
                container.RegisterInstance <IUnityContainer>(container);
            }

            if (!container.IsRegistered <BootstrapConventions>())
            {
                container.RegisterType <BootstrapConventions>(new ContainerControlledLifetimeManager());
            }

            container.AddNewExtension <SubscribeToMessageExtension>();
            container.AddNewExtension <InjectViewInRegionExtension>();

            return(wrapper);
        }
        protected override IServiceProvider CreateServiceProvider()
        {
            var nss = new DelegateNamingSubSystem()
            {
                SubSystemHandler = (s, hs) =>
                {
                    if (hs.Any(h => h.ComponentModel.IsOverridable()))
                    {
                        var nonOverridable = hs.Except(hs.Where(h => h.ComponentModel.IsOverridable()));
                        if (nonOverridable.Any())
                        {
                            return(nonOverridable.Single());
                        }
                    }

                    return(null);
                }
            };

            this.container = new Castle.Windsor.WindsorContainer();

            this.container.Kernel.AddSubSystem(SubSystemConstants.NamingKey, nss);
            this.container.Kernel.Resolver.AddSubResolver(new ArrayResolver(this.container.Kernel, true));

            var wrapper = new ServiceProviderWrapper(this.container);

            var bootConventions = new BootstrapConventions();

            this.container.Register(
                Component.For <IServiceProvider>()
                .Instance(wrapper)
                .Properties(pi => bootConventions.IgnorePropertyInjection(pi))
                );
            this.container.Register(Component.For <IWindsorContainer>().Instance(this.container));
            this.container.Register
            (
                Component.For <BootstrapConventions>()
                .Instance(bootConventions)
                .Properties(pi => bootConventions.IgnorePropertyInjection(pi))
            );

            this.container.AddFacility <Castle.Facilities.SubscribeToMessageFacility>();
            this.container.AddFacility <InjectViewInRegionFacility>();

            return(wrapper);
        }
예제 #3
0
        protected override IServiceProvider CreateServiceProvider()
        {
            //var nss = new DelegateNamingSubSystem()
            //{
            //	SubSystemHandler = ( s, hs ) =>
            //	{
            //		if ( hs.Any( h => h.ComponentModel.IsOverridable() ) )
            //		{
            //			var nonOverridable = hs.Except( hs.Where( h => h.ComponentModel.IsOverridable() ) );
            //			if ( nonOverridable.Any() )
            //			{
            //				return nonOverridable.Single();
            //			}
            //		}

            //		return null;
            //	}
            //};

            this.container = new UnityContainer();

            //this.container.Kernel.AddSubSystem( SubSystemConstants.NamingKey, nss );

            //in teoria Unity lo fa per i fatti suoi
            //this.container.Kernel.Resolver.AddSubResolver( new ArrayResolver( this.container.Kernel, true ) );

            var wrapper = new ServiceProviderWrapper(this.container);

            this.container.RegisterInstance <IServiceProvider>(wrapper);
            this.container.RegisterInstance <IUnityContainer>(this.container);
            this.container.RegisterType <BootstrapConventions>(new ContainerControlledLifetimeManager());

            this.container.AddNewExtension <SubscribeToMessageExtension>();
            this.container.AddNewExtension <InjectViewInRegionExtension>();

            return(wrapper);
        }