public void GetCurrent_WithoutLocatorProvider_ReturnsConfiguredServiceLocator_WithBootstrapConfigurationEntries()
        {
            ServiceLocator.SetLocatorProvider(null);

            var entry1 = new ServiceConfigurationEntry(
                typeof(IService1),
                new ServiceImplementationInfo(typeof(Service1), LifetimeKind.InstancePerDependency));
            var entry2 = new ServiceConfigurationEntry(
                typeof(IService2),
                new ServiceImplementationInfo(typeof(Service2), LifetimeKind.InstancePerDependency));

            SafeServiceLocator.BootstrapConfiguration.Register(entry1);
            SafeServiceLocator.BootstrapConfiguration.Register(entry2);

            var serviceLocatorProviderMock = MockRepository.GenerateStrictMock <IServiceLocatorProvider> ();
            var fakeServiceLocator         = MockRepository.GenerateStub <IServiceLocator>();

            serviceLocatorProviderMock
            .Expect(mock => mock.GetServiceLocator(Arg <ReadOnlyCollection <ServiceConfigurationEntry> > .List.Equal(new[] { entry1, entry2 })))
            .Return(fakeServiceLocator);

            ConfigureServiceLocatorProvider(serviceLocatorProviderMock);

            var result = SafeServiceLocator.Current;

            serviceLocatorProviderMock.VerifyAllExpectations();
            Assert.That(result, Is.SameAs(fakeServiceLocator));
        }
        public void GetInstance_DecoratedCompound_DecoratesCompound_DoesNotDecorateImplementations()
        {
            var implementation1           = new ServiceImplementationInfo(typeof(TestImplementation1), LifetimeKind.InstancePerDependency, RegistrationType.Multiple);
            var implementation2           = new ServiceImplementationInfo(typeof(TestImplementation2), LifetimeKind.InstancePerDependency, RegistrationType.Multiple);
            var decorator                 = new ServiceImplementationInfo(typeof(TestDecorator1), LifetimeKind.InstancePerDependency, RegistrationType.Decorator);
            var compound                  = new ServiceImplementationInfo(typeof(TestCompound), LifetimeKind.InstancePerDependency, RegistrationType.Compound);
            var serviceConfigurationEntry = new ServiceConfigurationEntry(typeof(ITestType), implementation1, implementation2, decorator, compound);

            var serviceLocator = CreateServiceLocator();

            serviceLocator.Register(serviceConfigurationEntry);

            var instance = serviceLocator.GetInstance(typeof(ITestType));

            Assert.That(instance, Is.TypeOf <TestDecorator1>());
            var decoratorInstance = (TestDecorator1)instance;

            Assert.That(decoratorInstance.DecoratedObject, Is.TypeOf <TestCompound>());
            var compoundInstance = (TestCompound)decoratorInstance.DecoratedObject;

            Assert.That(compoundInstance.InnerObjects, Is.Not.Empty);
            Assert.That(
                compoundInstance.InnerObjects.Select(i => i.GetType()),
                Is.EqualTo(new[] { typeof(TestImplementation1), typeof(TestImplementation2) }));
        }
        public void CreateFromAttributes_Multiple_EntriesAreSortedCorrectly()
        {
            var attribute1 = Tuple.Create(
                typeof(TestMultipleConcreteImplementationAttributesType1),
                new ImplementationForAttribute(typeof(ITestMultipleConcreteImplementationAttributesType))
            {
                Lifetime = LifetimeKind.Singleton, Position = 0
            });

            var attribute2 = Tuple.Create(
                typeof(TestMultipleConcreteImplementationAttributesType2),
                new ImplementationForAttribute(typeof(ITestMultipleConcreteImplementationAttributesType))
            {
                Lifetime = LifetimeKind.InstancePerDependency, Position = -1
            });

            var attributes = new[] { attribute1, attribute2 };

            var entry = ServiceConfigurationEntry.CreateFromAttributes(typeof(ITestMultipleConcreteImplementationAttributesType), attributes);

            Assert.That(entry.ServiceType, Is.EqualTo(typeof(ITestMultipleConcreteImplementationAttributesType)));

            Assert.That(entry.ImplementationInfos.Count, Is.EqualTo(2));
            Assert.That(entry.ImplementationInfos[0].ImplementationType, Is.EqualTo(typeof(TestMultipleConcreteImplementationAttributesType2)));
            Assert.That(entry.ImplementationInfos[0].Lifetime, Is.EqualTo(LifetimeKind.InstancePerDependency));
            Assert.That(entry.ImplementationInfos[1].ImplementationType, Is.EqualTo(typeof(TestMultipleConcreteImplementationAttributesType1)));
            Assert.That(entry.ImplementationInfos[1].Lifetime, Is.EqualTo(LifetimeKind.Singleton));
        }
示例#4
0
        public override void OnActionExecuting(System.Web.Mvc.ActionExecutingContext filterContext)
        {
            if (!this.Required)
            {
                return;
            }

            if (this.MobiContext.Service.ServiceData.ServiceStatus == MobiChat.Data.ServiceStatus.Free)
            {
                return;
            }
            else if (this.MobiContext.Service.ServiceData.ServiceStatus == MobiChat.Data.ServiceStatus.Offline)
            {
                Log.Error("Service status is offline.");
                filterContext.Result = this.ErrorView();
                return;
            }
            else if (this.MobiContext.Service.ServiceData.ServiceStatus == MobiChat.Data.ServiceStatus.Updating)
            {
                Log.Error("Service is updating.");
                filterContext.Result = this.ErrorView();
                return;
            }

            ServiceConfigurationEntry sce = this.MobiContext.GetConfiguration();

            if (sce.IsAgeVerificationRequired)
            {
                filterContext.Result = this.AvsView(filterContext);
                return;
            }

            return;
        }
        public void CreateFromAttributes_IncompatibleType()
        {
            var attribute = Tuple.Create(typeof(object), new ImplementationForAttribute(typeof(ITestSingletonConcreteImplementationAttributeType)));

            Assert.That(
                () => ServiceConfigurationEntry.CreateFromAttributes(typeof(ITestSingletonConcreteImplementationAttributeType), new[] { attribute }),
                Throws.InvalidOperationException.With.Message.EqualTo("The implementation type 'System.Object' does not implement the service type."));
        }
        public void Initialize_WithSingleInfo()
        {
            var implementationInfo        = new ServiceImplementationInfo(typeof(TestConcreteImplementationAttributeType), LifetimeKind.Singleton);
            var serviceConfigurationEntry = new ServiceConfigurationEntry(typeof(ITestSingletonConcreteImplementationAttributeType), implementationInfo);

            Assert.That(serviceConfigurationEntry.ServiceType, Is.EqualTo(typeof(ITestSingletonConcreteImplementationAttributeType)));
            Assert.That(serviceConfigurationEntry.ImplementationInfos, Is.EqualTo(new[] { implementationInfo }));
        }
示例#7
0
        public void GetServiceLocator_IncludesBootstrapConfiguration()
        {
            var entry = new ServiceConfigurationEntry(typeof(IService), new ServiceImplementationInfo(typeof(Service), LifetimeKind.InstancePerDependency));

            var sloc = _provider.GetServiceLocator(Array.AsReadOnly(new[] { entry }));

            Assert.That(sloc, Is.TypeOf <DefaultServiceLocator> ());
            Assert.That(sloc.GetInstance <IService>(), Is.Not.Null.And.TypeOf <Service>());
        }
        public void Register_ServiceConfigurationEntry_AddsEntryToRegistrations_AndToBootstrapLocator()
        {
            var entry = new ServiceConfigurationEntry(typeof(IService), new ServiceImplementationInfo(typeof(Service), LifetimeKind.Singleton));

            _configuration.Register(entry);

            Assert.That(_configuration.Registrations, Is.EqualTo(new[] { entry }));
            Assert.That(_configuration.BootstrapServiceLocator.GetInstance <IService>(), Is.Not.Null.And.TypeOf <Service>());
        }
        public void ToString_TwoEntries()
        {
            var entry = new ServiceConfigurationEntry(
                typeof(IComparable),
                new ServiceImplementationInfo(typeof(int), LifetimeKind.Singleton, RegistrationType.Single),
                new ServiceImplementationInfo(typeof(string), LifetimeKind.InstancePerDependency, RegistrationType.Decorator));

            Assert.That(entry.ToString(), Is.EqualTo(
                            "System.IComparable implementations: [{System.Int32, Singleton, Single}, {System.String, InstancePerDependency, Decorator}]"));
        }
        public void Initialize_WithEnumerable()
        {
            var info1 = new ServiceImplementationInfo(typeof(TestConcreteImplementationAttributeType), LifetimeKind.Singleton);
            var info2 = new ServiceImplementationInfo(typeof(TestConcreteImplementationAttributeType), LifetimeKind.Singleton);

            var entry = new ServiceConfigurationEntry(typeof(ITestSingletonConcreteImplementationAttributeType), new[] { info1, info2 });

            Assert.That(entry.ServiceType, Is.EqualTo(typeof(ITestSingletonConcreteImplementationAttributeType)));
            Assert.That(entry.ImplementationInfos, Is.EqualTo(new[] { info1, info2 }));
        }
示例#11
0
        public void Register_SingleAndMultipleImplementations_ThrowsInvalidOperationException()
        {
            var single   = new ServiceImplementationInfo(typeof(TestImplementation1), LifetimeKind.InstancePerDependency, RegistrationType.Single);
            var multiple = new ServiceImplementationInfo(typeof(TestImplementation2), LifetimeKind.InstancePerDependency, RegistrationType.Multiple);
            var serviceConfigurationEntry = new ServiceConfigurationEntry(typeof(ITestType), single, multiple);

            var serviceLocator = CreateServiceLocator();

            Assert.That(
                () => serviceLocator.Register(serviceConfigurationEntry),
                Throws.InvalidOperationException.With.Message.EqualTo(
                    "Service type 'Remotion.UnitTests.ServiceLocation.DefaultServiceLocatorTests.TestDomain.ITestType': "
                    + "Registrations of type 'Single' and 'Multiple' are mutually exclusive."));
        }
示例#12
0
        public void Register_SingleWithMultipleRegistrations_ThrowsInvalidOperationException()
        {
            var implementation1           = new ServiceImplementationInfo(typeof(TestImplementation1), LifetimeKind.InstancePerDependency, RegistrationType.Single);
            var implementation2           = new ServiceImplementationInfo(typeof(TestImplementation2), LifetimeKind.InstancePerDependency, RegistrationType.Single);
            var serviceConfigurationEntry = new ServiceConfigurationEntry(typeof(ITestType), implementation1, implementation2);

            var serviceLocator = CreateServiceLocator();

            Assert.That(
                () => serviceLocator.Register(serviceConfigurationEntry),
                Throws.InvalidOperationException.With.Message.EqualTo(
                    "Cannot register multiple implementations with registration type 'Single' "
                    + "for service type 'Remotion.UnitTests.ServiceLocation.DefaultServiceLocatorTests.TestDomain.ITestType'."));
        }
        public void Register_ServiceConfigurationEntry_IfLocatorThrows_NoRegistrationIsAdded()
        {
            // This causes the association between IServiceWithAttribute and ServiceWithAttribute1 to be stored in the BootstrapServiceLocator, so it will
            // later throw on Register.
            _configuration.BootstrapServiceLocator.GetInstance <IServiceWithAttribute>();

            var entry = new ServiceConfigurationEntry(
                typeof(IServiceWithAttribute),
                new ServiceImplementationInfo(typeof(ServiceWithAttribute2), LifetimeKind.Singleton));

            Assert.That(() => _configuration.Register(entry), Throws.InvalidOperationException);

            Assert.That(_configuration.Registrations, Is.Empty);
            Assert.That(_configuration.BootstrapServiceLocator.GetInstance <IServiceWithAttribute> (), Is.Not.Null.And.TypeOf <ServiceWithAttribute1> ());
        }
示例#14
0
        public void GetInstance_ServiceTypeWithFactoryReturningNull_ThrowsActivationException()
        {
            var implementation            = ServiceImplementationInfo.CreateSingle <ITestTypeWithErrors> (() => null);
            var serviceConfigurationEntry = new ServiceConfigurationEntry(typeof(ITestTypeWithErrors), implementation);

            var serviceLocator = CreateServiceLocator();

            serviceLocator.Register(serviceConfigurationEntry);

            Assert.That(
                () => serviceLocator.GetInstance(typeof(ITestTypeWithErrors)),
                Throws.TypeOf <ActivationException> ().With.Message.EqualTo(
                    "The registered factory returned null instead of an instance implementing the requested service type "
                    + "'Remotion.UnitTests.ServiceLocation.DefaultServiceLocatorTests.TestDomain.ITestTypeWithErrors'."));
        }
        public void GetInstance_DecoratorIsInstance_ImplementationIsSingleton_DecoratorBehaveAsSingleton()
        {
            var implementation            = new ServiceImplementationInfo(typeof(TestImplementation1), LifetimeKind.Singleton, RegistrationType.Single);
            var decorator                 = new ServiceImplementationInfo(typeof(TestDecorator1), LifetimeKind.InstancePerDependency, RegistrationType.Decorator);
            var serviceConfigurationEntry = new ServiceConfigurationEntry(typeof(ITestType), implementation, decorator);

            var serviceLocator = CreateServiceLocator();

            serviceLocator.Register(serviceConfigurationEntry);

            var instance1 = serviceLocator.GetInstance(typeof(ITestType));
            var instance2 = serviceLocator.GetInstance(typeof(ITestType));

            Assert.That(instance1, Is.SameAs(instance2));
            Assert.That(((TestDecorator1)instance1).DecoratedObject, Is.SameAs(((TestDecorator1)instance2).DecoratedObject));
        }
示例#16
0
        public void GetInstance_CompoundIsSingleton_ImplementationIsInstancePerDependency_ImplementationsBehaveAsSingleton()
        {
            var compound                  = new ServiceImplementationInfo(typeof(TestCompound), LifetimeKind.Singleton, RegistrationType.Compound);
            var implementation            = new ServiceImplementationInfo(typeof(TestImplementation1), LifetimeKind.InstancePerDependency, RegistrationType.Multiple);
            var serviceConfigurationEntry = new ServiceConfigurationEntry(typeof(ITestType), compound, implementation);

            var serviceLocator = CreateServiceLocator();

            serviceLocator.Register(serviceConfigurationEntry);

            var instance1 = serviceLocator.GetInstance(typeof(ITestType));
            var instance2 = serviceLocator.GetInstance(typeof(ITestType));

            Assert.That(instance1, Is.SameAs(instance2));
            Assert.That(((TestCompound)instance1).InnerObjects, Is.EqualTo(((TestCompound)instance2).InnerObjects));
        }
示例#17
0
        public bool TryGetServiceConfiguration()
        {
            this._serviceConfigurationEntry = MobiContext.Current.Service.GetConfiguration(MobiContext.Current.Service.ServiceData.FallbackCountry, this._mobileOperator);
            if (this._serviceConfigurationEntry == null)
            {
                this._serviceConfigurationEntry = MobiContext.Current.Service.GetConfiguration(MobiContext.Current.Service.ServiceData.FallbackCountry);
            }
            if (this._serviceConfigurationEntry == null)
            {
                Log.Error("SendMessageBase:: ServiceConfiguratioEtnry could not be loaded for " + this._service.Name);
                this.Status  = false;
                this.Message = this.ErrorMessage;
                return(true);
            }

            return(false);
        }
        public void GetAllInstances_WithMixedLifetimeKind_ReturnsSingletonAsSingletonAndInstanceAsInstance()
        {
            var implementation1           = new ServiceImplementationInfo(typeof(TestImplementation1), LifetimeKind.Singleton, RegistrationType.Multiple);
            var implementation2           = new ServiceImplementationInfo(typeof(TestImplementation2), LifetimeKind.InstancePerDependency, RegistrationType.Multiple);
            var serviceConfigurationEntry = new ServiceConfigurationEntry(typeof(ITestType), implementation1, implementation2);

            var serviceLocator = CreateServiceLocator();

            serviceLocator.Register(serviceConfigurationEntry);

            var instances1 = serviceLocator.GetAllInstances(typeof(ITestType)).ToArray();
            var instances2 = serviceLocator.GetAllInstances(typeof(ITestType)).ToArray();

            Assert.That(instances1, Is.Not.SameAs(instances2));
            Assert.That(instances1[0], Is.SameAs(instances2[0]));
            Assert.That(instances1[1], Is.Not.SameAs(instances2[1]));
        }
        public void GetInstance_DecoratorIsSingleton_ImplementationIsInstancePerDependency_DecoratorBehaveAsInstance()
        {
            // Integration test to ensure behavior even if ctor-check in ServiceImplementationInfo is removed.
            var implementation = new ServiceImplementationInfo(typeof(TestImplementation1), LifetimeKind.InstancePerDependency, RegistrationType.Single);
            var decorator      = new ServiceImplementationInfo(typeof(TestDecorator1), LifetimeKind.InstancePerDependency, RegistrationType.Decorator);

            PrivateInvoke.SetNonPublicField(decorator, "_lifetime", LifetimeKind.Singleton);
            var serviceConfigurationEntry = new ServiceConfigurationEntry(typeof(ITestType), implementation, decorator);

            var serviceLocator = CreateServiceLocator();

            serviceLocator.Register(serviceConfigurationEntry);

            var instance1 = serviceLocator.GetInstance(typeof(ITestType));
            var instance2 = serviceLocator.GetInstance(typeof(ITestType));

            Assert.That(instance1, Is.Not.SameAs(instance2));
            Assert.That(((TestDecorator1)instance1).DecoratedObject, Is.Not.SameAs(((TestDecorator1)instance2).DecoratedObject));
        }
示例#20
0
        public void GetInstance_ImplementationIsRegisteredAsFactoryWithSingletonLifetime_AndSingletonIsLazyInitialized()
        {
            TestImplementation1 expectedInstance = null;
            var serviceImplementation            = ServiceImplementationInfo.CreateSingle(() => expectedInstance = new TestImplementation1(), LifetimeKind.Singleton);
            var serviceConfigurationEntry        = new ServiceConfigurationEntry(typeof(ITestType), serviceImplementation);

            var serviceLocator = CreateServiceLocator();

            serviceLocator.Register(serviceConfigurationEntry);

            Assert.That(expectedInstance, Is.Null);
            var instance1 = serviceLocator.GetInstance(typeof(ITestType));

            Assert.That(expectedInstance, Is.Not.Null);

            var instance2 = serviceLocator.GetInstance(typeof(ITestType));

            Assert.That(instance1, Is.SameAs(instance2));
        }
        public void CreateFromAttributes_Single()
        {
            var attribute = new ImplementationForAttribute(typeof(ITestSingletonConcreteImplementationAttributeType))
            {
                Lifetime = LifetimeKind.Singleton
            };

            var entry = ServiceConfigurationEntry.CreateFromAttributes(
                typeof(ITestSingletonConcreteImplementationAttributeType),
                new[]
            {
                Tuple.Create(typeof(TestConcreteImplementationAttributeType), attribute)
            });

            Assert.That(entry.ServiceType, Is.EqualTo(typeof(ITestSingletonConcreteImplementationAttributeType)));

            Assert.That(entry.ImplementationInfos.Count, Is.EqualTo(1));
            Assert.That(entry.ImplementationInfos[0].ImplementationType, Is.EqualTo(typeof(TestConcreteImplementationAttributeType)));
            Assert.That(entry.ImplementationInfos[0].Lifetime, Is.EqualTo(LifetimeKind.Singleton));
        }
        public void GetAllInstances_ImplementationIsRegisteredAsFactoryWithInstanceLifetime()
        {
            TestImplementation1 expectedInstance = null;
            var serviceImplementation            = ServiceImplementationInfo.CreateMultiple(
                () => expectedInstance = new TestImplementation1(),
                LifetimeKind.InstancePerDependency);
            var serviceConfigurationEntry = new ServiceConfigurationEntry(typeof(ITestType), serviceImplementation);

            var serviceLocator = CreateServiceLocator();

            serviceLocator.Register(serviceConfigurationEntry);

            var instance1 = serviceLocator.GetAllInstances(typeof(ITestType)).SingleOrDefault();

            Assert.That(expectedInstance, Is.Not.Null);

            var instance2 = serviceLocator.GetAllInstances(typeof(ITestType)).SingleOrDefault();

            Assert.That(instance1, Is.Not.SameAs(instance2));
        }
示例#23
0
        public void GetInstance_WithFactoryReturningWrongType_ThrowsActivationException()
        {
            Func <ITestType> factory         = () => new TestImplementation1();
            Func <object>    factoryAsObject = factory;
            var implementation = ServiceImplementationInfo.CreateSingle <ITestTypeWithErrors> (() => null);

            PrivateInvoke.SetNonPublicField(implementation, "_factory", factoryAsObject);
            var serviceConfigurationEntry = new ServiceConfigurationEntry(typeof(ITestTypeWithErrors), implementation);

            var serviceLocator = CreateServiceLocator();

            serviceLocator.Register(serviceConfigurationEntry);

            Assert.That(
                () => serviceLocator.GetInstance(typeof(ITestTypeWithErrors)),
                Throws.TypeOf <ActivationException>().With.Message.EqualTo(
                    "The instance returned by the registered factory does not implement the requested type "
                    + "'Remotion.UnitTests.ServiceLocation.DefaultServiceLocatorTests.TestDomain.ITestTypeWithErrors'. "
                    + "(Instance type: 'Remotion.UnitTests.ServiceLocation.DefaultServiceLocatorTests.TestDomain.TestImplementation1'.)"));
        }
示例#24
0
        public void Register_CompoundWithMultipleRegistrations_ThrowsInvalidOperationException()
        {
            var compound1 = new ServiceImplementationInfo(
                typeof(TestCompoundWithMultipleRegistrations1),
                LifetimeKind.InstancePerDependency,
                RegistrationType.Compound);
            var compound2 = new ServiceImplementationInfo(
                typeof(TestCompoundWithMultipleRegistrations2),
                LifetimeKind.InstancePerDependency,
                RegistrationType.Compound);
            var serviceConfigurationEntry = new ServiceConfigurationEntry(typeof(ITestCompoundWithErrors), compound1, compound2);

            var serviceLocator = CreateServiceLocator();

            Assert.That(
                () => serviceLocator.Register(serviceConfigurationEntry),
                Throws.InvalidOperationException.With.Message.EqualTo(
                    "Cannot register multiple implementations with registration type 'Compound' "
                    + "for service type 'Remotion.UnitTests.ServiceLocation.DefaultServiceLocatorTests.TestDomain.ITestCompoundWithErrors'."));
        }
示例#25
0
        public void Initialization_AndDispose_ServiceLocator_ServiceConfigurationEntries()
        {
            ServiceLocator.SetLocatorProvider(() => _locator1);
            Assert.That(ServiceLocator.Current, Is.SameAs(_locator1));

            var entry1 = new ServiceConfigurationEntry(typeof(object), new ServiceImplementationInfo(typeof(DomainType1), LifetimeKind.InstancePerDependency));
            var entry2 = new ServiceConfigurationEntry(typeof(IFormattable), new ServiceImplementationInfo(typeof(DomainType2), LifetimeKind.Singleton));

            using (new ServiceLocatorScope(entry1, entry2))
            {
                Assert.That(ServiceLocator.Current, Is.Not.SameAs(_locator1));
                Assert.That(ServiceLocator.Current, Is.TypeOf <DefaultServiceLocator> ());
                Assert.That(ServiceLocator.Current.GetInstance(typeof(object)), Is.TypeOf <DomainType1> ());
                Assert.That(ServiceLocator.Current.GetInstance(typeof(object)), Is.Not.SameAs(ServiceLocator.Current.GetInstance(typeof(object))));
                Assert.That(ServiceLocator.Current.GetInstance(typeof(IFormattable)), Is.TypeOf <DomainType2> ());
                Assert.That(ServiceLocator.Current.GetInstance(typeof(IFormattable)), Is.SameAs(ServiceLocator.Current.GetInstance(typeof(IFormattable))));
            }

            Assert.That(ServiceLocator.Current, Is.SameAs(_locator1));
        }
        public void CreateFromAttributes_EqualPositions_DifferentRegistrationTypes()
        {
            var attribute1 = Tuple.Create(
                typeof(TestMultipleConcreteImplementationAttributesType1),
                new ImplementationForAttribute(typeof(ITestMultipleConcreteImplementationAttributesType))
            {
                Lifetime = LifetimeKind.Singleton, Position = 1, RegistrationType = RegistrationType.Compound
            });

            var attribute2 = Tuple.Create(
                typeof(TestMultipleConcreteImplementationAttributesType2),
                new ImplementationForAttribute(typeof(ITestMultipleConcreteImplementationAttributesType))
            {
                Lifetime = LifetimeKind.InstancePerDependency, Position = 1, RegistrationType = RegistrationType.Multiple
            });

            var attributes = new[] { attribute1, attribute2 };

            ServiceConfigurationEntry.CreateFromAttributes(typeof(ITestMultipleConcreteImplementationAttributesType), attributes);
        }
        public void GetInstance_ImplementationIsRegisteredAsFactoryWithSingletonLifetime_DecoratedFactoryIsUsed()
        {
            TestImplementation1 expectedInstance = null;
            var implementation            = ServiceImplementationInfo.CreateSingle(() => expectedInstance = new TestImplementation1(), LifetimeKind.Singleton);
            var decorator                 = new ServiceImplementationInfo(typeof(TestDecorator1), LifetimeKind.InstancePerDependency, RegistrationType.Decorator);
            var serviceConfigurationEntry = new ServiceConfigurationEntry(typeof(ITestType), implementation, decorator);

            var serviceLocator = CreateServiceLocator();

            serviceLocator.Register(serviceConfigurationEntry);

            var instance1 = serviceLocator.GetInstance(typeof(ITestType));

            Assert.That(expectedInstance, Is.Not.Null);
            Assert.That(((TestDecorator1)instance1).DecoratedObject, Is.SameAs(expectedInstance));

            var instance2 = serviceLocator.GetInstance(typeof(ITestType));

            Assert.That(instance1, Is.SameAs(instance2));

            Assert.That(((TestDecorator1)instance1).DecoratedObject, Is.SameAs(((TestDecorator1)instance2).DecoratedObject));
        }
        public void GetAllInstances_DecoratesImplementations()
        {
            var implementation1           = new ServiceImplementationInfo(typeof(TestImplementation1), LifetimeKind.InstancePerDependency, RegistrationType.Multiple);
            var implementation2           = new ServiceImplementationInfo(typeof(TestImplementation2), LifetimeKind.InstancePerDependency, RegistrationType.Multiple);
            var decorator                 = new ServiceImplementationInfo(typeof(TestDecorator1), LifetimeKind.InstancePerDependency, RegistrationType.Decorator);
            var serviceConfigurationEntry = new ServiceConfigurationEntry(typeof(ITestType), implementation1, implementation2, decorator);

            var serviceLocator = CreateServiceLocator();

            serviceLocator.Register(serviceConfigurationEntry);

            var instances = serviceLocator.GetAllInstances(typeof(ITestType)).ToArray();

            Assert.That(instances, Has.All.TypeOf <TestDecorator1>());

            var decoratorInstance1 = (TestDecorator1)instances[0];

            Assert.That(decoratorInstance1.DecoratedObject, Is.TypeOf <TestImplementation1>());

            var decoratorInstance2 = (TestDecorator1)instances[1];

            Assert.That(decoratorInstance2.DecoratedObject, Is.TypeOf <TestImplementation2>());
        }
示例#29
0
        public ServiceConfigurationEntry GetConfiguration(Data.Country country, Data.MobileOperator mobileOperator)
        {
            ServiceConfigurationEntry sce = null;

            if (mobileOperator == null)
            {
                if (this._countryConfigurationEntryMap.ContainsKey(country.ID))
                {
                    return(this._countryConfigurationEntryMap[country.ID]);
                }

                sce = ServiceConfigurationEntry.CreateManager().Load(this._serviceData, country);
                if (sce != null)
                {
                    this._countryConfigurationEntryMap.Add(country.ID, sce);
                }

                return(sce);
            }
            else
            {
                return(ServiceConfigurationEntry.CreateManager().Load(this._serviceData, country, mobileOperator));
            }
        }
        public void Initialize_WithEnumerable_Empty()
        {
            var entry = new ServiceConfigurationEntry(typeof(ITestSingletonConcreteImplementationAttributeType), new ServiceImplementationInfo[0]);

            Assert.That(entry.ImplementationInfos, Is.Empty);
        }