예제 #1
0
        /// <summary>
        /// Used to create the Container for the HttpHandler. Not used by Console Compiler and T4CSS
        /// </summary>
        /// <param name="configuration">Configuration for the HttpHandler</param>
        /// <returns></returns>
        private PandoraContainer CreateContainer(DotlessConfiguration configuration)
        {
            var container = new PandoraContainer();
            container.Register(p =>
                                   {
                                       p.Service<ILessSource>()
                                           .Implementor(configuration.LessSource);
                                       p.Service<ICache>()
                                           .Implementor<CssCache>();
                                       p.Service<IRequest>()
                                           .Implementor<Request>();

                                       if (!configuration.CacheEnabled)
                                       {
                                           p.Service<IResponse>()
                                               .Implementor<CssResponse>();
                                       }
                                       else
                                       {
                                           p.Service<IResponse>()
                                               .Implementor<CachedCssResponse>();
                                           p.Service<ILessEngine>()
                                               .Implementor<AspCacheDecorator>();
                                       }
                                   });

            return RegisterCoreServices(container, configuration);
        }
        public void NoRegistrationIsRequiredToInstantiateConcreteClassWithoutDependencies()
        {
            var container    = new PandoraContainer(new ComponentStore());
            var dependencies = container.Resolve <ClassWithNoDependencies>();

            Assert.IsType <ClassWithNoDependencies>(dependencies);
        }
        public void CanSplitGraph()
        {
            /*
             * Dotty Graph:
             *
             * digraph G {
             * a [label="IService :: A"] ;
             * a -> b [label="service1"] ;
             * a -> c [label="service2"] ;
             * b [label="IService :: B"] ;
             * b -> d ;
             * d [label="IService :: C"] ;
             * c [label="IService :: B"] ;
             * c -> f ;
             * f [label="IService :: C"] ;
             * }
             */

            var store = new ComponentStore();

            store.Add <IService, ClassWithTwoDependenciesOnItsOwnService>();
            store.Add <IService, ClassWithDependencyOnItsOwnService>();
            store.Add <IService, ClassWithNoDependencies>();

            var container = new PandoraContainer(store);

            var service = container.Resolve <IService>();

            Assert.IsType(typeof(ClassWithTwoDependenciesOnItsOwnService), service);
        }
예제 #4
0
        public IServiceLocator GetContainer(DotlessConfiguration configuration)
        {
            Container = new PandoraContainer();

            Container.Register(pandora => RegisterServices(pandora, configuration));

            return new CommonServiceLocatorAdapter(Container);
        }
        public void ClassWithDependencyOnConcreteClassResolves()
        {
            var container  = new PandoraContainer(new ComponentStore());
            var dependency =
                container.Resolve <GenericWithDependency <ClassWithNoDependencies> >();

            Assert.IsType <ClassWithNoDependencies>(dependency.Dependency);
        }
예제 #6
0
        public IServiceLocator GetContainer(DotlessConfiguration configuration)
        {
            Container = new PandoraContainer();

            Container.Register(pandora => RegisterServices(pandora, configuration));

            return(new CommonServiceLocatorAdapter(Container));
        }
        public void CanResolveConcreteType()
        {
            var store = new ComponentStore();
            store.Add<ClassWithNoDependencies, ClassWithNoDependencies>();
            var container = new PandoraContainer(store);

            Assert.DoesNotThrow(() => container.Resolve<ClassWithNoDependencies>());
        }
 public void ConcreteClassInstantiationCanBeTurnedOff()
 {
     var behaviorConfiguration = new BehaviorConfiguration
                                     {
                                         EnableImplicitTypeInstantiation = false
                                     };
     var container = new PandoraContainer(behaviorConfiguration);
     Assert.Throws<ServiceNotFoundException>(() => container.Resolve<ClassWithNoDependencies>());
 }
        public void CanResolveConcreteType()
        {
            var store = new ComponentStore();

            store.Add <ClassWithNoDependencies, ClassWithNoDependencies>();
            var container = new PandoraContainer(store);

            container.Resolve <ClassWithNoDependencies>();
        }
        public void ImplicitlyInstantiatedConcreteClassHasDefaultLifestyle()
        {
            var container = new PandoraContainer(new ComponentStore());

            var c1 = container.Resolve<ClassWithNoDependencies>();
            var c2 = container.Resolve<ClassWithNoDependencies>();

            Assert.Same(c1, c2);
        }
        public void ThrowsExceptionIfDependencyCouldNotBeSatisfied()
        {
            var store = new ComponentStore();

            store.Add <ClassWithOneDependency, ClassWithOneDependency>();
            var container = new PandoraContainer(store);

            Assert.Throws <DependencyMissingException>(() => container.Resolve <ClassWithOneDependency>());
        }
        public void ImplicitlyInstantiatedConcreteClassHasDefaultLifestyle()
        {
            var container = new PandoraContainer(new ComponentStore());

            var c1 = container.Resolve <ClassWithNoDependencies>();
            var c2 = container.Resolve <ClassWithNoDependencies>();

            Assert.Same(c1, c2);
        }
예제 #13
0
        public void CanResolveClassWithoutDependencies()
        {
            var componentStore = new ComponentStore();
            componentStore.Add<IService, ClassWithNoDependencies>();

            var container = new PandoraContainer(componentStore);
            var result = container.Resolve<IService>();

            Assert.IsType<ClassWithNoDependencies>(result);
        }
        public void CanResolveWhenGivenTwoConstructorsWhereOneCantBeSatisfied()
        {
            var store = new ComponentStore();

            store.Add <IService4, ClassWithMultipleConstructors>();

            var container = new PandoraContainer(store);

            container.Resolve <IService4>();
        }
예제 #15
0
        public void ContainerSetup()
        {
            var store = new ComponentStore();

            //Add components to the store.
            store.Register(p => p.Service <IService>()
                           .Implementor <ClassWithNoDependencies>());
            //Create the container
            var container = new PandoraContainer(store);
        }
예제 #16
0
        public void ExcludesServicesThatCantBeCreated()
        {
            var store = new ComponentStore();
            store.Add<IService, ClassWithDependencyOnItsOwnService>();
            var container = new PandoraContainer(store);

            var enumerable = container.ResolveAll<IService>();

            Assert.Equal(0, enumerable.Count());
        }
        public void ConcreteClassInstantiationCanBeTurnedOff()
        {
            var behaviorConfiguration = new BehaviorConfiguration
            {
                EnableImplicitTypeInstantiation = false
            };
            var container = new PandoraContainer(behaviorConfiguration);

            Assert.Throws <ServiceNotFoundException>(() => container.Resolve <ClassWithNoDependencies>());
        }
        public void ThrowsDependencyMissingExceptionIfDependencyChainCannotBeSatisfied()
        {
            var store = new ComponentStore();

            store.Add <IService, ClassWithDependencyOnItsOwnService>();

            var container = new PandoraContainer(store);

            Assert.Throws <DependencyMissingException>(() => container.Resolve <IService>());
        }
        public void NoRegistrationIsRequiredToInstantiateConcreteClassWithoutDependencies()
        {
            var container = new PandoraContainer(new ComponentStore());

            Assert.DoesNotThrow(() =>
                                    {
                                        var dependencies = container.Resolve<ClassWithNoDependencies>();
                                        Assert.IsType<ClassWithNoDependencies>(dependencies);
                                    });
        }
        public void ThrowsExceptionIfTypeNotRegistered()
        {
            var store = new ComponentStore();

            var container = new PandoraContainer(store);

            Assert.Throws <ServiceNotFoundException>(() => {
                var result = container.Resolve <IService>();
            });
        }
예제 #21
0
        public void ExcludesServicesThatCantBeCreated()
        {
            var store = new ComponentStore();

            store.Add <IService, ClassWithDependencyOnItsOwnService>();
            var container = new PandoraContainer(store);

            var enumerable = container.ResolveAll <IService>();

            Assert.Equal(0, enumerable.Count());
        }
        public void CanInsertInstanceWithoutName()
        {
            var store = new ComponentStore();
            var instance = new ClassWithNoDependencies();
            store.AddInstance<IService>(instance);
            var container = new PandoraContainer(store);

            var service = container.Resolve<IService>();

            Assert.Same(instance, service);
        }
예제 #23
0
        public void CanResolveClassWithOneDependency()
        {
            IComponentStore componentStore = new ComponentStore();
            componentStore.Add<IService, ClassWithNoDependencies>();
            componentStore.Add<IService2, ClassWithOneDependency>();

            PandoraContainer locator = new PandoraContainer(componentStore);
            var result = locator.Resolve<IService2>();

            Assert.IsType<ClassWithOneDependency>(result);
        }
예제 #24
0
        public void CanResolveClassWithTwoDependenciesOnItsOwnServiceWithOnlyOneSubdependencyRegistration()
        {
            var store = new ComponentStore();
            store.Add<IService, ClassWithTwoDependenciesOnItsOwnService>();
            store.Add<IService, ClassWithNoDependencies>();

            var container = new PandoraContainer(store);

            var service = container.Resolve<IService>();
            Assert.IsType(typeof (ClassWithTwoDependenciesOnItsOwnService), service);
        }
예제 #25
0
        public void CanRetrieveServiceByName()
        {
            var store = new ComponentStore();
            //This registration is to give the container something to choose from, in case named lookup won't work
            store.Add<IService, ClassWithDependencyOnItsOwnService>("memory.repository");
            store.Add<IService, ClassWithNoDependencies>("db.repository");
            var container = new PandoraContainer(store);

            var service = container.Resolve<IService>("db.repository");
            Assert.IsType<ClassWithNoDependencies>(service);
        }
        public void ClassWithDependencyOnConcreteClassResolves()
        {
            var container = new PandoraContainer(new ComponentStore());

            Assert.DoesNotThrow(() =>
                                    {
                                        var dependency =
                                            container.Resolve<GenericWithDependency<ClassWithNoDependencies>>();
                                        Assert.IsType<ClassWithNoDependencies>(dependency.Dependency);
                                    });
        }
예제 #27
0
        public void RetrievalByNameThrowsExceptionWhenNameNotRegistered()
        {
            var store = new ComponentStore();
            var container = new PandoraContainer(store);
            //To make it lookup something
            container.Register(p =>
                p.Service<ClassWithNoDependencies>()
                    .Implementor<ClassWithNoDependencies>());

            Assert.Throws<ServiceNotFoundException>(() => container.Resolve<ClassWithNoDependencies>("test"));
        }
        public void DependencyMissingExceptionPropagatesThroughMultipleLevels()
        {
            var store = new ComponentStore();

            store.Add <IService3, ClassDependingOnClassWithOneDependency>();
            store.Add <IService2, ClassWithOneDependency>();

            var container = new PandoraContainer(store);

            Assert.Throws <DependencyMissingException>(() => container.Resolve <IService3>());
        }
        public void CanResolveClassWithoutDependencies()
        {
            var componentStore = new ComponentStore();

            componentStore.Add <IService, ClassWithNoDependencies>();

            var container = new PandoraContainer(componentStore);
            var result    = container.Resolve <IService>();

            Assert.IsType <ClassWithNoDependencies>(result);
        }
        public void ActivationHappensEveryTime()
        {
            var store = new ComponentStore();
            var registration = store.Add<IService, ClassWithNoDependencies>();
            registration.Lifestyle = ComponentLifestyles.Transient;

            var container = new PandoraContainer(store);
            var service = container.Resolve<IService>();
            var service2 = container.Resolve<IService>();

            Assert.NotSame(service, service2);
        }
예제 #31
0
        public void ReturnsAllServicesForGivenType()
        {
            var store = new ComponentStore();
            store.Add<IService, ClassWithNoDependencies>("test1");
            store.Add<IService, ClassWithDependencyOnItsOwnService>();
            store.Add<IService2, ClassWithOneDependency>();
            var container = new PandoraContainer(store);

            var enumerable = container.ResolveAll<IService>();

            Assert.Equal(2, enumerable.Count());
        }
        public void CanResolveClassWithOneDependency()
        {
            IComponentStore componentStore = new ComponentStore();

            componentStore.Add <IService, ClassWithNoDependencies>();
            componentStore.Add <IService2, ClassWithOneDependency>();

            PandoraContainer locator = new PandoraContainer(componentStore);
            var result = locator.Resolve <IService2>();

            Assert.IsType <ClassWithOneDependency>(result);
        }
예제 #33
0
        public void RetrievalByNameThrowsExceptionWhenNameNotRegistered()
        {
            var store     = new ComponentStore();
            var container = new PandoraContainer(store);

            //To make it lookup something
            container.Register(p =>
                               p.Service <ClassWithNoDependencies>()
                               .Implementor <ClassWithNoDependencies>());

            Assert.Throws <ServiceNotFoundException>(() => container.Resolve <ClassWithNoDependencies>("test"));
        }
예제 #34
0
        public void CanInsertInstanceWithoutName()
        {
            var store    = new ComponentStore();
            var instance = new ClassWithNoDependencies();

            store.AddInstance <IService>(instance);
            var container = new PandoraContainer(store);

            var service = container.Resolve <IService>();

            Assert.Same(instance, service);
        }
예제 #35
0
        public void CanResolveClassWithMultipleDependencies()
        {
            var store = new ComponentStore();
            store.Add<IService, ClassWithNoDependencies>();
            store.Add<IService2, ClassWithOneDependency>();
            store.Add<IService3, ClassDependingOnClassWithOneDependency>();

            var container = new PandoraContainer(store);
            var result = container.Resolve<IService3>();

            Assert.IsType<ClassDependingOnClassWithOneDependency>(result);
        }
        public void ActivationHappensEveryTime()
        {
            var store = new ComponentStore();
            var registration = store.Add<IService, ClassWithNoDependencies>();
            registration.Lifestyle = ComponentLifestyles.Transient;

            var container = new PandoraContainer(store);
            var service = container.Resolve<IService>();
            var service2 = container.Resolve<IService>();

            Assert.NotSame(service, service2);
        }
예제 #37
0
        public void ReturnsAllServicesForGivenType()
        {
            var store = new ComponentStore();

            store.Add <IService, ClassWithNoDependencies>("test1");
            store.Add <IService, ClassWithDependencyOnItsOwnService>();
            store.Add <IService2, ClassWithOneDependency>();
            var container = new PandoraContainer(store);

            var enumerable = container.ResolveAll <IService>();

            Assert.Equal(2, enumerable.Count());
        }
        public void CanResolveClassWithMultipleDependencies()
        {
            var store = new ComponentStore();

            store.Add <IService, ClassWithNoDependencies>();
            store.Add <IService2, ClassWithOneDependency>();
            store.Add <IService3, ClassDependingOnClassWithOneDependency>();

            var container = new PandoraContainer(store);
            var result    = container.Resolve <IService3>();

            Assert.IsType <ClassDependingOnClassWithOneDependency>(result);
        }
        public void CanResolveClassWithTwoDependenciesOnItsOwnServiceWithOnlyOneSubdependencyRegistration()
        {
            var store = new ComponentStore();

            store.Add <IService, ClassWithTwoDependenciesOnItsOwnService>();
            store.Add <IService, ClassWithNoDependencies>();

            var container = new PandoraContainer(store);

            var service = container.Resolve <IService>();

            Assert.IsType(typeof(ClassWithTwoDependenciesOnItsOwnService), service);
        }
        public void ImplicitlyInstantiatedConcreteClassLifestyleCanBeConfigured()
        {
            var configuration = new BehaviorConfiguration
                                    {
                                        ImplicitTypeLifestyle = BehaviorConfiguration.Lifestyle.Transient
                                    };
            var container = new PandoraContainer(configuration);

            var c1 = container.Resolve<ClassWithNoDependencies>();
            var c2 = container.Resolve<ClassWithNoDependencies>();

            Assert.NotSame(c1, c2);
        }
예제 #41
0
        public void CanRetrieveServiceByName()
        {
            var store = new ComponentStore();

            //This registration is to give the container something to choose from, in case named lookup won't work
            store.Add <IService, ClassWithDependencyOnItsOwnService>("memory.repository");
            store.Add <IService, ClassWithNoDependencies>("db.repository");
            var container = new PandoraContainer(store);

            var service = container.Resolve <IService>("db.repository");

            Assert.IsType <ClassWithNoDependencies>(service);
        }
        public void ImplicitlyInstantiatedConcreteClassLifestyleCanBeConfigured()
        {
            var configuration = new BehaviorConfiguration
            {
                ImplicitTypeLifestyle = BehaviorConfiguration.Lifestyle.Transient
            };
            var container = new PandoraContainer(configuration);

            var c1 = container.Resolve <ClassWithNoDependencies>();
            var c2 = container.Resolve <ClassWithNoDependencies>();

            Assert.NotSame(c1, c2);
        }
        public void CanSpecifyDependencyByName()
        {
            var store = new ComponentStore();
            store.Add<IService, ClassWithNoDependencies>("service1");
            store.Add<IService, ClassWithNoDependencies2>("service2");
            store.Add<ClassWithOneDependency, ClassWithOneDependency>()
                .Parameters["dependency"] = "service2";
            var container = new PandoraContainer(store);

            var service2 = container.Resolve<ClassWithOneDependency>();

            Assert.IsType<ClassWithNoDependencies2>(service2.Dependency);
        }
        public void CanSpecifyDependencyByName()
        {
            var store = new ComponentStore();

            store.Add <IService, ClassWithNoDependencies>("service1");
            store.Add <IService, ClassWithNoDependencies2>("service2");
            store.Add <ClassWithOneDependency, ClassWithOneDependency>()
            .Parameters["dependency"] = "service2";
            var container = new PandoraContainer(store);

            var service2 = container.Resolve <ClassWithOneDependency>();

            Assert.IsType <ClassWithNoDependencies2>(service2.Dependency);
        }
        public void ActivationHappensOnlyOnceForSingletonComponents()
        {
            var store        = new ComponentStore();
            var registration = store.Add <IService, ClassWithNoDependencies>("test");

            registration.Lifestyle = ComponentLifestyles.Singleton;

            var container = new PandoraContainer(store);

            var service  = container.Resolve <IService>("test");
            var service2 = container.Resolve <IService>("test");

            Assert.Same(service, service2);
        }
        public void CanResolveDependencyChainOfSameService()
        {
            var store = new ComponentStore();

            store.Add <IService, ClassWithDependencyOnItsOwnService>();
            store.Add <IService, ClassWithNoDependencies>();

            var container = new PandoraContainer(store);

            var service = container.Resolve <IService>();

            Assert.IsType(typeof(ClassWithDependencyOnItsOwnService), service);
            var ownService = (ClassWithDependencyOnItsOwnService)service;

            Assert.IsType(typeof(ClassWithNoDependencies), ownService.SubService);
        }
예제 #47
0
        public IServiceLocator GetContainer()
        {
            if (_container == null)
            {
                lock (LockObject)
                {
                    if (_container == null)
                    {
                        DotlessConfiguration configuration = new WebConfigConfigurationLoader().GetConfiguration();
                        _container = CreateContainer(configuration);
                    }
                }
            }

            return new CommonServiceLocatorAdapter(_container);
        }
예제 #48
0
 private PandoraContainer RegisterCoreServices(PandoraContainer container, DotlessConfiguration configuration)
 {
     container.Register(p =>
                            {
                                if (configuration.MinifyOutput)
                                {
                                    p.Service<ILessEngine>()
                                        .Implementor<MinifierDecorator>();
                                }
                                p.Service<ILessEngine>()
                                    .Implementor<ExtensibleEngine>();
                                p.Service<ILessSource>()
                                    .Implementor<FileSource>();
                            });
     return container;
 }
        public void CanInstantiateClassThatDependsOnAString()
        {
            var store = new ComponentStore();
            store.Register(
                p =>
                {
                    p.Service<ClassDependingOnAString>()
                        .Implementor<ClassDependingOnAString>()
                        .Parameters("string1");
                    p.Service<string>("string1")
                        .Instance("Hello World");
                });
            var container = new PandoraContainer(store);

            var resolve = container.Resolve<ClassDependingOnAString>();
            Assert.Equal("Hello World", resolve.Dependency);
        }
예제 #50
0
        public void CanInstantiateClassThatDependsOnAString()
        {
            var store = new ComponentStore();

            store.Register(
                p =>
            {
                p.Service <ClassDependingOnAString>()
                .Implementor <ClassDependingOnAString>()
                .Parameters("string1");
                p.Service <string>("string1")
                .Instance("Hello World");
            });
            var container = new PandoraContainer(store);

            var resolve = container.Resolve <ClassDependingOnAString>();

            Assert.Equal("Hello World", resolve.Dependency);
        }
        public void CanResolveDependencyChainOfSameServiceWithMultipleLevels()
        {
            var store = new ComponentStore();

            store.Add <IService, ClassWithDependencyOnItsOwnService>();
            store.Add <IService, ClassWithDependencyOnItsOwnService>();
            store.Add <IService, ClassWithNoDependencies>();

            var container = new PandoraContainer(store);

            var service = container.Resolve <IService>();

            var level1 = (ClassWithDependencyOnItsOwnService)service;
            var level2 = (ClassWithDependencyOnItsOwnService)level1.SubService;
            var level3 = (ClassWithNoDependencies)level2.SubService;

            Assert.IsType(typeof(ClassWithDependencyOnItsOwnService), level1);
            Assert.IsType(typeof(ClassWithDependencyOnItsOwnService), level2);
            Assert.IsType(typeof(ClassWithNoDependencies), level3);
        }
예제 #52
0
        public void CanResolveDependencyChainOfSameService()
        {
            var store = new ComponentStore();
            store.Add<IService, ClassWithDependencyOnItsOwnService>();
            store.Add<IService, ClassWithNoDependencies>();

            var container = new PandoraContainer(store);

            var service = container.Resolve<IService>();

            Assert.IsType(typeof (ClassWithDependencyOnItsOwnService), service);
            var ownService = (ClassWithDependencyOnItsOwnService)service;
            Assert.IsType(typeof (ClassWithNoDependencies), ownService.SubService);
        }
 public PandoraSurfaceInterface()
 {
     var store = new ComponentStore();
     container = new PandoraContainer(store);
 }
예제 #54
0
 public FluentInterface()
 {
     store = new ComponentStore();
     container = new PandoraContainer(store);
 }
예제 #55
0
        public void CanSplitGraph()
        {
            /*
             * Dotty Graph:
             *
            digraph G {
              a [label="IService :: A"] ;
              a -> b [label="service1"] ;
              a -> c [label="service2"] ;
              b [label="IService :: B"] ;
              b -> d ;
              d [label="IService :: C"] ;
              c [label="IService :: B"] ;
              c -> f ;
              f [label="IService :: C"] ;
            }
             */

            var store = new ComponentStore();
            store.Add<IService, ClassWithTwoDependenciesOnItsOwnService>();
            store.Add<IService, ClassWithDependencyOnItsOwnService>();
            store.Add<IService, ClassWithNoDependencies>();

            var container = new PandoraContainer(store);

            var service = container.Resolve<IService>();
            Assert.IsType(typeof (ClassWithTwoDependenciesOnItsOwnService), service);
        }
예제 #56
0
        public void DependencyMissingExceptionPropagatesThroughMultipleLevels()
        {
            var store = new ComponentStore();
            store.Add<IService3, ClassDependingOnClassWithOneDependency>();
            store.Add<IService2, ClassWithOneDependency>();

            var container = new PandoraContainer(store);

            Assert.Throws<DependencyMissingException>(() => container.Resolve<IService3>());
        }
예제 #57
0
        public void ThrowsDependencyMissingExceptionIfDependencyChainCannotBeSatisfied()
        {
            var store = new ComponentStore();
            store.Add<IService, ClassWithDependencyOnItsOwnService>();

            var container = new PandoraContainer(store);

            Assert.Throws<DependencyMissingException>(() => container.Resolve<IService>());
        }
예제 #58
0
        public void ThrowsExceptionIfDependencyCouldNotBeSatisfied()
        {
            var store = new ComponentStore();
            store.Add<ClassWithOneDependency, ClassWithOneDependency>();
            var container = new PandoraContainer(store);

            Assert.Throws<DependencyMissingException>(() => container.Resolve<ClassWithOneDependency>());
        }
        public PandoraSurfaceInterface()
        {
            var store = new ComponentStore();

            container = new PandoraContainer(store);
        }
예제 #60
0
        public void ThrowsExceptionIfTypeNotRegistered()
        {
            var store = new ComponentStore();

            var container = new PandoraContainer(store);

            Assert.Throws<ServiceNotFoundException>(() => {
                                                              var result = container.Resolve<IService>();
            });
        }