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()); }
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 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))); }
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); }
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); } }
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 }
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); }
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 }
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 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"); } }
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"); } }
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))); }
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); }
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 }
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); }
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); }
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); }
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); } }
public void Test_KernelRegister2() { var context = new ConventionalRegistrationContext( Assembly.GetExecutingAssembly(), LocalIocManager, new ConventionalRegistrationConfig()); var result = BasedOnDescriptor(context); var kernel = new DefaultKernel(); kernel.Register(result); }
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>(); }
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>(); }
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>()); }
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))); }
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>(); }
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>(); }
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."); }
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); }
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); }
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); }
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; }
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); }
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")); }
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")); }
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); }
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); }
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); } }
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 }
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]; } }
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); }
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); }
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>(); }
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); }