public void Init()
		{
			kernel = new DefaultKernel();
			kernel.Register(Component.For(typeof(CompA)).Named("compa"));
			kernel.Register(Component.For(typeof(CompB)).Named("compb"));

			deps = new Dictionary<string, object>();
			deps.Add("cc", new CompC(12));
			deps.Add("myArgument", "ernst");
		}
        protected void Application_Start(object sender, EventArgs e)
        {
            var kernel = new DefaultKernel();

            kernel.Register(Component.For <HttpContextBase>()
                            .LifeStyle.Transient
                            .UsingFactoryMethod(() => new HttpContextWrapper(HttpContext.Current)));
            kernel.Register(Component.For <SomeService>()
                            .LifeStyle.HybridPerWebRequestTransient());
            kernel.Resolve <SomeService>();
        }
		public void ContainerShouldUseFirstRegisteredDependencyOfTypeByDefault_SmsRegisteredFirst()
		{
			IKernel kernel = new DefaultKernel();
			kernel.Register(Component.For(typeof(IAlarmSender)).ImplementedBy(typeof(SmsSender)).Named("sms"));
			kernel.Register(Component.For(typeof(IAlarmSender)).ImplementedBy(typeof(EmailSender)).Named("email"));

			kernel.Register(Component.For(typeof(AlarmGenerator)).Named("generator"));

			var gen = kernel.Resolve<AlarmGenerator>("generator");
			Assert.AreEqual(typeof(SmsSender), gen.Sender.GetType());
		}
Пример #4
0
        public void UsingPropertyWithPrivateSetter()
        {
            IKernel container = new DefaultKernel();

            container.Register(Component.For(typeof(IService1)).ImplementedBy(typeof(Service1)).Named("service1"));
            container.Register(Component.For(typeof(IService2)).ImplementedBy(typeof(Service2)).Named("service2"));

            Service2 service2 = (Service2)container.Resolve <IService2>();

            Assert.IsNull(service2.S, "Kernel should ignore private setter properties");
        }
Пример #5
0
        public void UsingPropertyWithPrivateSetter()
        {
            IKernel container = new DefaultKernel();

            container.Register(Component.For(typeof(IService1)).ImplementedBy(typeof(Service1)).Named("service1"));
            container.Register(Component.For(typeof(IService2)).ImplementedBy(typeof(Service2)).Named("service2"));

            Service2 service2 = (Service2)container.Resolve<IService2>();

            Assert.IsNull(service2.S,"Kernel should ignore private setter properties");
        }
		public void EmptyDelegateReturnsFirstTypeLoaded()
		{
			IKernel kernel = new DefaultKernel();
			kernel.AddSubSystem(SubSystemConstants.NamingKey, new KeySearchNamingSubSystem());

			kernel.Register(Component.For(typeof(ICommon)).ImplementedBy(typeof(CommonImpl1)).Named("1.common"));
			kernel.Register(Component.For(typeof(ICommon)).ImplementedBy(typeof(CommonImpl2)).Named("2.common"));

			ICommon common = kernel[typeof(ICommon)] as ICommon;

			Assert.IsNotNull(common);
			Assert.AreEqual(typeof(CommonImpl1), common.GetType());
		}
		public void ReturnsFirstMatchingType()
		{
			IKernel kernel = new DefaultKernel();
			kernel.AddSubSystem(SubSystemConstants.NamingKey,
			                    new KeySearchNamingSubSystem(delegate(string key) { return key.StartsWith("1"); }));

			kernel.Register(Component.For(typeof(ICommon)).ImplementedBy(typeof(CommonImpl1)).Named("1.common"));
			kernel.Register(Component.For(typeof(ICommon)).ImplementedBy(typeof(CommonImpl2)).Named("11.common"));

			ICommon common = kernel[typeof(ICommon)] as ICommon;

			Assert.IsNotNull(common);
			Assert.AreEqual(typeof(CommonImpl1), common.GetType());
		}
		public void AddingDependencyToServiceWithCustomDependency()
		{
			var kernel = new DefaultKernel();
			kernel.Register(Component.For(typeof(NeedClassWithCustomerDependency)).Named("NeedClassWithCustomerDependency"));
			kernel.Register(Component.For(typeof(HasCustomDependency)).Named("HasCustomDependency"));

			Assert.AreEqual(HandlerState.WaitingDependency, kernel.GetHandler("HasCustomDependency").CurrentState);

			var hash = new Dictionary<object, object>();
			hash["name"] = new CompA();
			((IKernelInternal)kernel).RegisterCustomDependencies("HasCustomDependency", hash);
			Assert.AreEqual(HandlerState.Valid, kernel.GetHandler("HasCustomDependency").CurrentState);

			Assert.IsNotNull(kernel.Resolve(typeof(NeedClassWithCustomerDependency)));
		}
Пример #9
0
        public void Singleton_WithNonSingletonDependencies_DoesNotReResolveDependencies()
        {
            kernel.Register(Component.For(typeof(DefaultSpamService)).Named("spamservice"));
            kernel.Register(Component.For(typeof(DefaultMailSenderService)).Named("mailsender"));

            IKernel subkernel1 = new DefaultKernel();

            subkernel1.Register(Component.For(typeof(DefaultTemplateEngine)).Named("templateengine"));
            kernel.AddChildKernel(subkernel1);

            IKernel subkernel2 = new DefaultKernel();

            subkernel2.Register(
                Component.For(typeof(DefaultTemplateEngine)).Named("templateengine").LifeStyle.Is(LifestyleType.Transient));
            kernel.AddChildKernel(subkernel2);

            var templateengine1 = subkernel1.Resolve <DefaultTemplateEngine>("templateengine");
            var spamservice1    = subkernel1.Resolve <DefaultSpamService>("spamservice");

            Assert.IsNotNull(spamservice1);
            Assert.AreEqual(spamservice1.TemplateEngine.Key, templateengine1.Key);

            var templateengine2 = subkernel2.Resolve <DefaultTemplateEngine>("templateengine");
            var spamservice2    = subkernel2.Resolve <DefaultSpamService>("spamservice");

            Assert.IsNotNull(spamservice2);
            Assert.AreEqual(spamservice1, spamservice2);
            Assert.AreEqual(spamservice1.TemplateEngine.Key, templateengine1.Key);
            Assert.AreNotEqual(spamservice2.TemplateEngine.Key, templateengine2.Key);
        }
Пример #10
0
        public void Will_give_good_error_message_if_cannot_resolve_service_that_is_likely_decorated()
        {
            DefaultKernel kernel = new DefaultKernel();
            kernel.Register(
                Component.For<IRepository>().ImplementedBy<Repository1>(),
                Component.For<IRepository>().ImplementedBy<DecoratedRepository2>()
                );
            try
            {
                kernel.Resolve<IRepository>();
            }
            catch (HandlerException e)
            {
                const string expectedMessage = @"Can't create component 'Castle.MicroKernel.Tests.ClassComponents.Repository1' as it has dependencies to be satisfied. 
Castle.MicroKernel.Tests.ClassComponents.Repository1 is waiting for the following dependencies: 

Services: 
- Castle.MicroKernel.Tests.ClassComponents.IRepository. 
  A dependency cannot be satisfied by itself, did you forget to add a parameter name to differentiate between the two dependencies? 
 
Castle.MicroKernel.Tests.ClassComponents.DecoratedRepository2 is registered and is matching the required service, but cannot be resolved.

Castle.MicroKernel.Tests.ClassComponents.DecoratedRepository2 is waiting for the following dependencies: 

Keys (components with specific keys)
- name which was not registered. 
";
                Assert.AreEqual(expectedMessage, e.Message);
            }
        }
Пример #11
0
        public void ReleaseWrongObjectWillNotReleaseInstance()
        {
            // Fixture setup
            var kernel    = new DefaultKernel();
            var model     = new ComponentModel("foo", typeof(ICloneable), typeof(Version));
            var activator = kernel.CreateComponentActivator(model);

            var leaseMock = new Mock <ILease> {
                DefaultValue = DefaultValue.Mock
            };

            kernel.Register(Component.For <ILease>().Instance(leaseMock.Object));

            var sut = new CacheLifestyleManager();

            sut.Init(activator, kernel, model);

            var first = sut.Resolve(CreationContext.Empty);

            // Exercise system
            sut.Release(new object());
            // Verify outcome
            var second = sut.Resolve(CreationContext.Empty);

            Assert.Same(first, second);
            // Teardown
        }
Пример #12
0
        public void ResolveWillReturnNewInstanceWhenLeaseExpires()
        {
            // Fixture setup
            var kernel    = new DefaultKernel();
            var model     = new ComponentModel("foo", typeof(ICloneable), typeof(Version));
            var activator = kernel.CreateComponentActivator(model);

            var expired   = false;
            var leaseStub = new Mock <ILease> {
                DefaultValue = DefaultValue.Mock
            };

            leaseStub.Setup(l => l.IsExpired).Returns(() =>
            {
                var b   = expired;
                expired = !expired;
                return(b);
            });
            kernel.Register(Component.For <ILease>().Instance(leaseStub.Object));

            var sut = new CacheLifestyleManager();

            sut.Init(activator, kernel, model);
            // Exercise system
            var first  = sut.Resolve(CreationContext.Empty);
            var second = sut.Resolve(CreationContext.Empty);

            // Verify outcome
            Assert.NotSame(first, second);
            // Teardown
        }
		public void MaxSize()
		{
			IKernel kernel = new DefaultKernel();
			kernel.Register(Component.For(typeof(PoolableComponent1)).Named("a"));

			var instances = new List<PoolableComponent1>
			{
				kernel.Resolve<PoolableComponent1>("a"),
				kernel.Resolve<PoolableComponent1>("a"),
				kernel.Resolve<PoolableComponent1>("a"),
				kernel.Resolve<PoolableComponent1>("a"),
				kernel.Resolve<PoolableComponent1>("a")
			};

			PoolableComponent1 other1 = kernel.Resolve<PoolableComponent1>("a");

			Assert.IsNotNull(other1);
			Assert.IsTrue(!instances.Contains(other1));

			foreach (PoolableComponent1 inst in instances)
			{
				kernel.ReleaseComponent(inst);
			}

			kernel.ReleaseComponent(other1);

			PoolableComponent1 other2 = kernel.Resolve<PoolableComponent1>("a");
			Assert.IsNotNull(other2);
			Assert.IsTrue(other1 != other2);
			Assert.IsTrue(instances.Contains(other2));

			kernel.ReleaseComponent(other2);
		}
		public void SimpleUsage()
		{
			IKernel kernel = new DefaultKernel();
			kernel.Register(Component.For(typeof(PoolableComponent1)).Named("a"));

			PoolableComponent1 inst1 = kernel.Resolve<PoolableComponent1>("a");
			PoolableComponent1 inst2 = kernel.Resolve<PoolableComponent1>("a");

			Assert.IsNotNull(inst1);
			Assert.IsNotNull(inst2);

			kernel.ReleaseComponent(inst2);
			kernel.ReleaseComponent(inst1);

			PoolableComponent1 other1 = kernel.Resolve<PoolableComponent1>("a");
			PoolableComponent1 other2 = kernel.Resolve<PoolableComponent1>("a");

			Assert.IsNotNull(other1);
			Assert.IsNotNull(other2);

			Assert.AreSame(inst1, other1);
			Assert.AreSame(inst2, other2);

			kernel.ReleaseComponent(inst2);
			kernel.ReleaseComponent(inst1);
		}
Пример #15
0
		public void AddingComponentToRootKernelWhenChildKernelHasStartableFacility()
		{
			IKernel kernel = new DefaultKernel();
			IKernel childKernel = new DefaultKernel();
			kernel.AddChildKernel(childKernel);
			childKernel.AddFacility(new StartableFacility());
			kernel.Register(Component.For(typeof (A)).Named("string")); // exception here
		}
Пример #16
0
        public void Public_property_with_Protected_setter_causes_Object_Reference_exception()
        {
            IKernel kernel = new DefaultKernel();

            kernel.Register(Component.For <Presenter>());
            kernel.Register(Component.For <View>());

            try
            {
                Presenter p = (Presenter)kernel.Resolve(typeof(Presenter));
                Assert.IsNotNull(p);
            }
            catch (NullReferenceException)
            {
                Assert.Fail("Should not have thrown a NullReferenceException");
            }
        }
Пример #17
0
		public void Should_not_fail_when_constructor_parameter_and_public_property_with_private_setter_have_same_name()
		{
			IKernel kernel = new DefaultKernel();

		    kernel.Register(Component.For<Service2>());
		    kernel.Register(Component.For<Service1>());

		    try
			{
				Service2 svc = kernel.Resolve<Service2>();
				Assert.IsNotNull(svc);
			}
			catch (NullReferenceException)
			{
				Assert.Fail("Should not have thrown a NullReferenceException");
			}
		}
Пример #18
0
        public void Should_not_fail_when_constructor_parameter_and_public_property_with_private_setter_have_same_name()
        {
            IKernel kernel = new DefaultKernel();

            kernel.Register(Component.For <Service2>());
            kernel.Register(Component.For <Service1>());

            try
            {
                Service2 svc = kernel.Resolve <Service2>();
                Assert.IsNotNull(svc);
            }
            catch (NullReferenceException)
            {
                Assert.Fail("Should not have thrown a NullReferenceException");
            }
        }
Пример #19
0
		public void Public_property_with_Protected_setter_causes_Object_Reference_exception()
		{
			IKernel kernel = new DefaultKernel();

		    kernel.Register(Component.For<Presenter>());
		    kernel.Register(Component.For<View>());

		    try
			{
				Presenter p = (Presenter)kernel.Resolve(typeof(Presenter));
				Assert.IsNotNull(p);
			}
			catch (NullReferenceException)
			{
				Assert.Fail("Should not have thrown a NullReferenceException");
			}
		}
		public void AddingDependencyToServiceWithCustomDependency()
		{
			var kernel = new DefaultKernel();
			kernel.Register(Component.For<NeedClassWithCustomerDependency>(),
			                Component.For<HasCustomDependency>().DependsOn(new Dictionary<object, object> { { "name", new CompA() } }));

			Assert.AreEqual(HandlerState.Valid, kernel.GetHandler(typeof(HasCustomDependency)).CurrentState);
			Assert.IsNotNull(kernel.Resolve(typeof(NeedClassWithCustomerDependency)));
		}
Пример #21
0
		public void WillAskResolverWhenTryingToResolveDependencyAfterAnotherHandlerWasRegistered()
		{
			var resolver = new FooBarResolver();

			IKernel kernel = new DefaultKernel();
			kernel.Resolver.AddSubResolver(resolver);

			kernel.Register(Component.For<Foo>());
			var handler = kernel.GetHandler(typeof(Foo));

			Assert.AreEqual(HandlerState.WaitingDependency, handler.CurrentState);

			resolver.Result = 15;

			kernel.Register(Component.For<A>());

			Assert.AreEqual(HandlerState.Valid, handler.CurrentState);
		}
Пример #22
0
        public void AddingComponentToRootKernelWhenChildKernelHasStartableFacility()
        {
            IKernel kernel      = new DefaultKernel();
            IKernel childKernel = new DefaultKernel();

            kernel.AddChildKernel(childKernel);
            childKernel.AddFacility(new StartableFacility());
            kernel.Register(Component.For(typeof(String)).Named("string"));             // exception here
        }
Пример #23
0
 public void Should_ignore_reference_to_itself()
 {
     DefaultKernel kernel = new DefaultKernel();
     kernel.Register(
         Component.For<IRepository>().ImplementedBy<Repository1>(),
         Component.For<IRepository>().ImplementedBy<DecoratedRepository>()
         );
     Repository1 repos = (Repository1)kernel.Resolve<IRepository>();
     Assert.IsInstanceOfType(typeof(DecoratedRepository), repos.InnerRepository);
 }
Пример #24
0
        public void Sub_resolver_can_provide_null_as_the_value_to_use()
        {
            IKernel kernel = new DefaultKernel();

            kernel.Resolver.AddSubResolver(new NullResolver());

            kernel.Register(Component.For <ComponentWithDependencyNotInContainer>());

            Assert.Null(kernel.Resolve <ComponentWithDependencyNotInContainer>().DependencyNotInContainer);
        }
Пример #25
0
        public void WillAskResolverWhenTryingToResolveDependencyAfterAnotherHandlerWasRegistered()
        {
            var resolver = new FooBarResolver();

            IKernel kernel = new DefaultKernel();

            kernel.Resolver.AddSubResolver(resolver);

            kernel.Register(Component.For <Foo>());
            var handler = kernel.GetHandler(typeof(Foo));

            Assert.AreEqual(HandlerState.WaitingDependency, handler.CurrentState);

            resolver.Result = 15;

            kernel.Register(Component.For <A>());

            Assert.AreEqual(HandlerState.Valid, handler.CurrentState);
        }
Пример #26
0
 public void Will_give_good_error_message_if_cannot_resolve_service_that_is_likely_decorated_when_there_are_multiple_service()
 {
     DefaultKernel kernel = new DefaultKernel();
     kernel.Register(
         Component.For<IRepository>().ImplementedBy<Repository1>(),
         Component.For<IRepository>().ImplementedBy<DecoratedRepository2>().Named("foo"),
         Component.For<IRepository>().ImplementedBy<Repository1>().Named("bar")
         );
     kernel.Resolve<IRepository>();
 }
 public void No_context_uses_transient() {
     using (var k = new DefaultKernel()) {
         k.Register(Component.For<Dummy>().LifeStyle.HybridPerWebRequestTransient());
         var d1 = k.Resolve<Dummy>();
         Assert.IsNotNull(d1);
         var d2 = k.Resolve<Dummy>();
         Assert.IsNotNull(d2);
         Assert.AreNotSame(d1, d2);
     }
 }
 public void No_context_uses_transient()
 {
     using (var k = new DefaultKernel()) {
         k.Register(Component.For <Dummy>().LifeStyle.HybridPerWebRequestTransient());
         var d1 = k.Resolve <Dummy>();
         Assert.IsNotNull(d1);
         var d2 = k.Resolve <Dummy>();
         Assert.IsNotNull(d2);
         Assert.AreNotSame(d1, d2);
     }
 }
Пример #29
0
        public void Test_KernelRegister2()
        {
            var context = new ConventionalRegistrationContext(
                Assembly.GetExecutingAssembly(),
                LocalIocManager,
                new ConventionalRegistrationConfig());
            var result = BasedOnDescriptor(context);
            var kernel = new DefaultKernel();

            kernel.Register(result);
        }
Пример #30
0
        public void Requesting_parent_component_with_child_dependency_from_child_component()
        {
            var subkernel = new DefaultKernel();

            kernel.AddChildKernel(subkernel);

            kernel.Register(Component.For <UsesSimpleComponent1>());
            subkernel.Register(Component.For <SimpleComponent1>());

            subkernel.Resolve <UsesSimpleComponent1>();
        }
Пример #31
0
        public void ParentKernelFindsAndCreateChildComponent()
        {
            IKernel subkernel = new DefaultKernel();

            subkernel.Register(Component.For(typeof(DefaultTemplateEngine)).Named("templateengine"));

            kernel.AddChildKernel(subkernel);

            Assert.IsFalse(kernel.HasComponent(typeof(DefaultTemplateEngine)));
            object engine = kernel.Resolve <DefaultTemplateEngine>();
        }
Пример #32
0
        public void ParentKernelFindsAndCreateChildComponent()
        {
            IKernel subkernel = new DefaultKernel();

            subkernel.Register(Component.For(typeof(DefaultTemplateEngine)).Named("templateengine"));

            Kernel.AddChildKernel(subkernel);

            Assert.IsFalse(Kernel.HasComponent(typeof(DefaultTemplateEngine)));

            Assert.Throws <ComponentNotFoundException>(() => Kernel.Resolve <DefaultTemplateEngine>());
        }
Пример #33
0
        public void AddingDependencyToServiceWithCustomDependency()
        {
            var kernel = new DefaultKernel();

            kernel.Register(Component.For <NeedClassWithCustomerDependency>(),
                            Component.For <HasCustomDependency>().DependsOn(new Dictionary <object, object> {
                { "name", new CompA() }
            }));

            Assert.AreEqual(HandlerState.Valid, kernel.GetHandler(typeof(HasCustomDependency)).CurrentState);
            Assert.IsNotNull(kernel.Resolve(typeof(NeedClassWithCustomerDependency)));
        }
Пример #34
0
        public void DoesNotResolveArraysByDefault()
        {
            var kernel = new DefaultKernel();

            kernel.Register(
                Component.For <Thing>(),
                Component.For <ISubThing>().ImplementedBy <First>(),
                Component.For <ISubThing>().ImplementedBy <Second>(),
                Component.For <ISubThing>().ImplementedBy <Third>()
                );

            var thing = kernel.Resolve <Thing>();
        }
Пример #35
0
        public void ChildDependenciesIsSatisfiedEvenWhenComponentTakesLongToBeAddedToParentContainer()
        {
            var container      = new DefaultKernel();
            var childContainer = new DefaultKernel();

            container.AddChildKernel(childContainer);
            childContainer.Register(Component.For(typeof(UsesIEmptyService)).Named("component"));

            container.Register(
                Component.For(typeof(IEmptyService)).ImplementedBy(typeof(EmptyServiceA)).Named("service1"));

            var comp = childContainer.Resolve <UsesIEmptyService>();
        }
Пример #36
0
		public void When_attemting_to_resolve_component_with_nonpublic_ctor_should_throw_meaningfull_exception()
		{
			var kernel = new DefaultKernel();

			kernel.Register(Component.For<HasProtectedConstructor>());

			Exception exception =
				Assert.Throws<ComponentActivatorException>(() => kernel.Resolve<HasProtectedConstructor>());

			exception = exception.InnerException;
			Assert.IsNotNull(exception);
			StringAssert.Contains("public", exception.Message, "Exception should say that constructor has to be public.");

		}
        public void When_attemting_to_resolve_component_with_nonpublic_ctor_should_throw_meaningfull_exception()
        {
            var kernel = new DefaultKernel();

            kernel.Register(Component.For <HasProtectedConstructor>());

            Exception exception =
                Assert.Throws <ComponentActivatorException>(() =>
                                                            kernel.Resolve <HasProtectedConstructor>());

            exception = exception.InnerException;
            Assert.IsNotNull(exception);
            StringAssert.Contains("public", exception.Message, "Exception should say that constructor has to be public.");
        }
Пример #38
0
        private WindsorContainer CreateContainer()
        {
            var kernel = new DefaultKernel();

            /* Ajout un chargeur pour les classes concrètes. */
            kernel.Register(Component.For <ILazyComponentLoader>().ImplementedBy <ConcreteClassLoader>());

            /* Désactive l'injection des propriétés. */
            kernel.ComponentModelBuilder.RemoveContributor(
                kernel.ComponentModelBuilder.Contributors.OfType <PropertiesDependenciesModelInspector>().Single());

            var container = new WindsorContainer(kernel, new ZeroInstaller());

            return(container);
        }
Пример #39
0
        public void DoesNotDiscoverCircularDependencies()
        {
            var kernel = new DefaultKernel();

            kernel.Resolver.AddSubResolver(new ArrayResolver(kernel));

            // a circular reference exception should be thrown here
            kernel.Register(
                Component.For <Thing>(),
                Component.For <ISubThing>().ImplementedBy <Circular>()
                );

            // this crashes the test framework!
            // var thing = kernel.Resolve<Thing>();
        }
		public void KernelSerialization()
		{
			IKernel kernel = new DefaultKernel();
			kernel.Register(Component.For(typeof(CustomerImpl)).Named("key"));
			Assert.IsTrue(kernel.HasComponent("key"));

			MemoryStream stream = new MemoryStream();
			BinaryFormatter formatter = new BinaryFormatter();

			formatter.Serialize(stream, kernel);

			stream.Position = 0;

			IKernel desKernel = (IKernel) formatter.Deserialize(stream);
			Assert.IsTrue(desKernel.HasComponent("key"));
		}
		public void ChildDependenciesSatisfiedAmongContainers()
		{
			IKernel subkernel = new DefaultKernel();

			kernel.Register(Component.For(typeof(DefaultTemplateEngine)).Named("templateengine"));
			kernel.Register(Component.For(typeof(DefaultMailSenderService)).Named("mailsender"));

			kernel.AddChildKernel(subkernel);
			subkernel.Register(Component.For(typeof(DefaultSpamService)).Named("spamservice"));

			DefaultSpamService spamservice = (DefaultSpamService) subkernel["spamservice"];

			Assert.IsNotNull(spamservice);
			Assert.IsNotNull(spamservice.MailSender);
			Assert.IsNotNull(spamservice.TemplateEngine);
		}
Пример #42
0
        public void ChildDependenciesSatisfiedAmongContainers()
        {
            IKernel subkernel = new DefaultKernel();

            kernel.Register(Component.For(typeof(DefaultTemplateEngine)).Named("templateengine"));
            kernel.Register(Component.For(typeof(DefaultMailSenderService)).Named("mailsender"));

            kernel.AddChildKernel(subkernel);
            subkernel.Register(Component.For(typeof(DefaultSpamService)).Named("spamservice"));

            var spamservice = subkernel.Resolve <DefaultSpamService>("spamservice");

            Assert.IsNotNull(spamservice);
            Assert.IsNotNull(spamservice.MailSender);
            Assert.IsNotNull(spamservice.TemplateEngine);
        }
Пример #43
0
        public void SetUp()
        {
            kernel = new DefaultKernel();

            kernel.AddFacility <StartableFacility>();

            kernel.Register(
                Component.For <StartableDisposableAndInitializableComponent>()
                .LifeStyle.Transient
                );

            component = kernel.Resolve <StartableDisposableAndInitializableComponent>();
            component.DoSomething();
            kernel.ReleaseComponent(component);

            calledMethods = component.calledMethods;
        }
Пример #44
0
        public void SameLevelDependenciesSatisfied()
        {
            IKernel child = new DefaultKernel();

            kernel.Register(Component.For(typeof(DefaultTemplateEngine)).Named("templateengine"));
            kernel.Register(Component.For(typeof(DefaultSpamService)).Named("spamservice"));

            kernel.AddChildKernel(child);

            child.Register(Component.For(typeof(DefaultMailSenderService)).Named("mailsender"));

            var spamservice = child.Resolve <DefaultSpamService>("spamservice");

            Assert.IsNotNull(spamservice);
            Assert.IsNotNull(spamservice.MailSender);
            Assert.IsNotNull(spamservice.TemplateEngine);
        }
        public void PerWebRequestLifestyleManagerTest() {
            var tw = new StringWriter();
            var wr = new SimpleWorkerRequest("/", Directory.GetCurrentDirectory(), "default.aspx", null, tw);
            var module = new PerWebRequestLifestyleModule();

            var ctx = HttpModuleRunner.GetContext(wr, new[] { module });
            HttpContext.Current = ctx.Key;

            using (var kernel = new DefaultKernel()) {
                kernel.Register(Component.For<object>().LifeStyle.PerWebRequest);
                var instance1 = kernel.Resolve<object>();
                Assert.IsNotNull(instance1);
                var instance2 = kernel.Resolve<object>();
                Assert.IsNotNull(instance2);
                Assert.AreSame(instance1, instance2);
            }
        }
        public void Parent_component_will_NOT_have_dependencies_from_child()
        {
            Kernel.Register(Component.For <DefaultTemplateEngine>(),
                            Component.For <DefaultSpamService>());

            var child = new DefaultKernel();

            Kernel.AddChildKernel(child);

            child.Register(Component.For <DefaultMailSenderService>());

            var spamservice = child.Resolve <DefaultSpamService>();

            Assert.IsNotNull(spamservice);
            Assert.IsNotNull(spamservice.TemplateEngine);
            Assert.IsNull(spamservice.MailSender);
        }
Пример #47
0
        public void KernelSerialization()
        {
            IKernel kernel = new DefaultKernel();

            kernel.Register(Component.For(typeof(CustomerImpl)).Named("key"));
            Assert.IsTrue(kernel.HasComponent("key"));

            var stream    = new MemoryStream();
            var formatter = new BinaryFormatter();

            formatter.Serialize(stream, kernel);

            stream.Position = 0;

            var desKernel = (IKernel)formatter.Deserialize(stream);

            Assert.IsTrue(desKernel.HasComponent("key"));
        }
Пример #48
0
        public void ChildKernelOverloadsParentKernel1()
        {
            var instance1 = new DefaultTemplateEngine();
            var instance2 = new DefaultTemplateEngine();

            // subkernel added with already registered components that overload parent components.

            IKernel subkernel = new DefaultKernel();

            subkernel.Register(Component.For <DefaultTemplateEngine>().Named("engine").Instance(instance1));
            Assert.AreEqual(instance1, subkernel.Resolve <DefaultTemplateEngine>("engine"));

            kernel.Register(Component.For <DefaultTemplateEngine>().Named("engine").Instance(instance2));
            Assert.AreEqual(instance2, kernel.Resolve <DefaultTemplateEngine>("engine"));

            kernel.AddChildKernel(subkernel);
            Assert.AreEqual(instance1, subkernel.Resolve <DefaultTemplateEngine>("engine"));
            Assert.AreEqual(instance2, kernel.Resolve <DefaultTemplateEngine>("engine"));
        }
Пример #49
0
		public void WillAskResolverWhenTryingToResolveDependencyAfterAnotherHandlerWasRegistered()
		{
			FooBarResolver resolver = new FooBarResolver();

			IKernel kernel = new DefaultKernel();
			kernel.Resolver.AddSubResolver(resolver);

			kernel.Register(Component.For(typeof(Foo)).Named("foo"));
			IHandler handler = kernel.GetHandler("foo");
			Assert.AreEqual(HandlerState.WaitingDependency, handler.CurrentState);

			resolver.Result = 15;

			//should force reevaluation of state
			((IKernelInternal)kernel).RaiseHandlerRegistered(null);
			((IKernelInternal)kernel).RaiseHandlersChanged();

			Assert.AreEqual(HandlerState.Valid, handler.CurrentState);
		}
Пример #50
0
        public void ChildKernelOverloadsParentKernel2()
        {
            var instance1 = new DefaultTemplateEngine();
            var instance2 = new DefaultTemplateEngine();

            IKernel subkernel = new DefaultKernel();

            kernel.AddChildKernel(subkernel);

            // subkernel added first, then populated with overloaded components after

            kernel.Register(Component.For <DefaultTemplateEngine>().Named("engine").Instance(instance2));
            Assert.AreEqual(instance2, kernel.Resolve <DefaultTemplateEngine>("engine"));
            Assert.AreEqual(instance2, subkernel.Resolve <DefaultTemplateEngine>("engine"));

            subkernel.Register(Component.For <DefaultTemplateEngine>().Named("engine").Instance(instance1));
            Assert.AreEqual(instance1, subkernel.Resolve <DefaultTemplateEngine>("engine"));
            Assert.AreEqual(instance2, kernel.Resolve <DefaultTemplateEngine>("engine"));
        }
		public void Will_give_good_error_message_if_cannot_resolve_service_that_is_likely_decorated()
		{
			DefaultKernel kernel = new DefaultKernel();
			kernel.Register(
				Component.For<IRepository>().ImplementedBy<Repository1>(),
				Component.For<IRepository>().ImplementedBy<DecoratedRepository2>()
				);
			var exception =
				Assert.Throws(typeof(HandlerException), () =>
				{
					kernel.Resolve<IRepository>();
				});

			string expectedMessage =
				string.Format(
					"Can't create component 'Castle.MicroKernel.Tests.ClassComponents.Repository1' as it has dependencies to be satisfied. {0}Castle.MicroKernel.Tests.ClassComponents.Repository1 is waiting for the following dependencies: {0}{0}Services: {0}- Castle.MicroKernel.Tests.ClassComponents.IRepository. {0}  A dependency cannot be satisfied by itself, did you forget to add a parameter name to differentiate between the two dependencies? {0}{0}Castle.MicroKernel.Tests.ClassComponents.DecoratedRepository2 is registered and is matching the required service, but cannot be resolved.{0}{0}Castle.MicroKernel.Tests.ClassComponents.DecoratedRepository2 is waiting for the following dependencies: {0}{0}Keys (components with specific keys){0}- name which was not registered. {0}",
					Environment.NewLine);
			Assert.AreEqual(expectedMessage, exception.Message);

		}
Пример #52
0
        public void ShouldResolveArrayOfDependencies()
        {
            var kernel = new DefaultKernel();

            kernel.Resolver.AddSubResolver(new ArrayResolver(kernel));

            kernel.Register(
                Component.For <Thing>(),
                Component.For <ISubThing>().ImplementedBy <First>(),
                Component.For <ISubThing>().ImplementedBy <Second>(),
                Component.For <ISubThing>().ImplementedBy <Third>()
                );

            var thing = kernel.Resolve <Thing>();

            Assert.That(thing.SubThings.Count, Is.EqualTo(3));
            Assert.That(thing.SubThings[0], Is.InstanceOf(typeof(First)));
            Assert.That(thing.SubThings[1], Is.InstanceOf(typeof(Second)));
            Assert.That(thing.SubThings[2], Is.InstanceOf(typeof(Third)));
        }
        public void With_context_uses_context() {
            var tw = new StringWriter();
            var wr = new SimpleWorkerRequest("/", Directory.GetCurrentDirectory(), "default.aspx", null, tw);
            var module = new PerWebRequestLifestyleModule();

            var ctx = HttpModuleRunner.GetContext(wr, new[] { module });
            HttpContext.Current = ctx.Key;

            using (var k = new DefaultKernel()) {
                k.Register(Component.For<Dummy>().LifeStyle.HybridPerWebRequestTransient());
                var d1 = k.Resolve<Dummy>();
                Assert.IsNotNull(d1);
                var d2 = k.Resolve<Dummy>();
                Assert.IsNotNull(d2);
                Assert.AreSame(d1, d2);
                ctx.Value.FireEndRequest();
                ctx.Key.Items["castle.per-web-request-lifestyle-cache"] = null;
                var d3 = k.Resolve<Dummy>();
                Assert.AreNotSame(d1, d3);
            }
        }
Пример #54
0
        public void FirstResolveWillRenewLease()
        {
            // Fixture setup
            var kernel    = new DefaultKernel();
            var model     = new ComponentModel("foo", typeof(ICloneable), typeof(Version));
            var activator = kernel.CreateComponentActivator(model);

            var leaseMock = new Mock <ILease> {
                DefaultValue = DefaultValue.Mock
            };

            kernel.Register(Component.For <ILease>().Instance(leaseMock.Object));

            var sut = new CacheLifestyleManager();

            sut.Init(activator, kernel, model);
            // Exercise system
            sut.Resolve(CreationContext.Empty);
            // Verify outcome
            leaseMock.Verify(l => l.Renew());
            // Teardown
        }
Пример #55
0
		public void When_attemting_to_resolve_component_with_nonpublic_ctor_should_throw_meaningfull_exception()
		{
			IKernel kernel = new DefaultKernel();

		    kernel.Register(Component.For<WithNonPublicCtor>());

		    bool exceptionThrown = false;

			try
			{
				WithNonPublicCtor svc = kernel.Resolve<WithNonPublicCtor>();
				Assert.IsNotNull(svc);
			}
			catch (ComponentActivatorException exception)
			{
				ComponentActivatorException inner = exception.InnerException as ComponentActivatorException;
				Assert.IsNotNull(inner);
				StringAssert.Contains("public", inner.Message, "Exception should say that constructor has to be public.");

				exceptionThrown = true;
			}

			Assert.IsTrue(exceptionThrown, "A {0} should have been thrown.", typeof(ComponentActivatorException).Name);
		}
		public void MultiThreaded_RemoveResolve_Throws_When_LargeRatio_Of_ComponentsToService()
		{
			var threadCount = 1000;
			var list = new List<Exception>();
			var locker = new object();
			var rand = new Random();
			var waitEvent = new ManualResetEvent(false);

			IKernel kernel = new DefaultKernel();
			kernel.AddSubSystem(SubSystemConstants.NamingKey, new KeySearchNamingSubSystem(delegate { return false; }));

			kernel.Register(Component.For(typeof(ICommon)).ImplementedBy(typeof(CommonImpl1)).Named("common"));

			WaitCallback resolveThread = delegate
			{
				waitEvent.WaitOne();
				while (threadCount > 0 && list.Count == 0)
				{
					try
					{
						kernel.Resolve<ICommon>();
					}
					catch (Exception e)
					{
						lock (locker)
						{
							list.Add(e);
						}
					}
				}
			};
			ThreadPool.QueueUserWorkItem(resolveThread);

			WaitCallback removeThread = delegate
			{
				waitEvent.WaitOne();
				kernel.RemoveComponent(threadCount + ".common");
				Interlocked.Decrement(ref threadCount);
			};
			for (var i = 0; i < threadCount; i++)
			{
				kernel.Register(Component.For(typeof(ICommon)).ImplementedBy(typeof(CommonImpl1)).Named(i + ".common"));
				ThreadPool.QueueUserWorkItem(removeThread);
			}

			waitEvent.Set();
			while (threadCount > 0 && list.Count == 0)
			{
				Thread.Sleep(15);
			}

			if (list.Count > 0)
			{
				throw list[0];
			}
		}
Пример #57
0
		public void Singleton_WithNonSingletonDependencies_DoesNotReResolveDependencies()
		{
			kernel.Register(Component.For(typeof(DefaultSpamService)).Named("spamservice"));
			kernel.Register(Component.For(typeof(DefaultMailSenderService)).Named("mailsender"));

			IKernel subkernel1 = new DefaultKernel();
			subkernel1.Register(Component.For(typeof(DefaultTemplateEngine)).Named("templateengine"));
			kernel.AddChildKernel(subkernel1);

			IKernel subkernel2 = new DefaultKernel();
			subkernel2.Register(
				Component.For(typeof(DefaultTemplateEngine)).Named("templateengine").LifeStyle.Is(LifestyleType.Transient));
			kernel.AddChildKernel(subkernel2);

			var templateengine1 = subkernel1.Resolve<DefaultTemplateEngine>("templateengine");
			var spamservice1 = subkernel1.Resolve<DefaultSpamService>("spamservice");
			Assert.IsNotNull(spamservice1);
			Assert.AreEqual(spamservice1.TemplateEngine.Key, templateengine1.Key);

			var templateengine2 = subkernel2.Resolve<DefaultTemplateEngine>("templateengine");
			var spamservice2 = subkernel2.Resolve<DefaultSpamService>("spamservice");
			Assert.IsNotNull(spamservice2);
			Assert.AreEqual(spamservice1, spamservice2);
			Assert.AreEqual(spamservice1.TemplateEngine.Key, templateengine1.Key);
			Assert.AreNotEqual(spamservice2.TemplateEngine.Key, templateengine2.Key);
		}
Пример #58
0
		public void UseChildComponentsForParentDependenciesWhenRequestedFromChild()
		{
			IKernel subkernel = new DefaultKernel();

			kernel.Register(Component.For(typeof(DefaultSpamService)).Named("spamservice").LifeStyle.Is(LifestyleType.Transient));
			kernel.Register(Component.For(typeof(DefaultMailSenderService)).Named("mailsender"));
			kernel.Register(Component.For(typeof(DefaultTemplateEngine)).Named("templateengine"));

			kernel.AddChildKernel(subkernel);
			subkernel.Register(Component.For(typeof(DefaultTemplateEngine)).Named("templateengine"));

			var templateengine = kernel.Resolve<DefaultTemplateEngine>("templateengine");
			var sub_templateengine = subkernel.Resolve<DefaultTemplateEngine>("templateengine");

			var spamservice = subkernel.Resolve<DefaultSpamService>("spamservice");
			Assert.AreNotEqual(spamservice.TemplateEngine, templateengine);
			Assert.AreEqual(spamservice.TemplateEngine, sub_templateengine);

			spamservice = kernel.Resolve<DefaultSpamService>("spamservice");
			Assert.AreNotEqual(spamservice.TemplateEngine, sub_templateengine);
			Assert.AreEqual(spamservice.TemplateEngine, templateengine);
		}
Пример #59
0
		public void Requesting_parent_component_with_child_dependency_from_child_component()
		{
			var subkernel = new DefaultKernel();
			kernel.AddChildKernel(subkernel);

			kernel.Register(Component.For<UsesSimpleComponent1>());
			subkernel.Register(Component.For<SimpleComponent1>());

			subkernel.Resolve<UsesSimpleComponent1>();
		}
Пример #60
0
		public void SameLevelDependenciesSatisfied()
		{
			IKernel child = new DefaultKernel();

			kernel.Register(Component.For(typeof(DefaultTemplateEngine)).Named("templateengine"));
			kernel.Register(Component.For(typeof(DefaultSpamService)).Named("spamservice"));

			kernel.AddChildKernel(child);

			child.Register(Component.For(typeof(DefaultMailSenderService)).Named("mailsender"));

			var spamservice = child.Resolve<DefaultSpamService>("spamservice");

			Assert.IsNotNull(spamservice);
			Assert.IsNotNull(spamservice.MailSender);
			Assert.IsNotNull(spamservice.TemplateEngine);
		}