public void ComponentGraph() { IKernel kernel = new DefaultKernel(); kernel.AddSubSystem(SubSystemConstants.NamingKey, new NamingPartsSubSystem()); kernel.AddComponent("common:key1=true", typeof(ICommon), typeof(CommonImpl1)); kernel.AddComponent("common:secure=true", typeof(ICommon), typeof(CommonImpl2)); GraphNode[] nodes = kernel.GraphNodes; Assert.IsNotNull(nodes); Assert.AreEqual(2, nodes.Length); }
public void EmptyDelegateReturnsFirstTypeLoaded() { IKernel kernel = new DefaultKernel(); kernel.AddSubSystem(SubSystemConstants.NamingKey, new KeySearchNamingSubSystem()); kernel.AddComponent("1.common", typeof(ICommon), typeof(CommonImpl1)); kernel.AddComponent("2.common", typeof(ICommon), typeof(CommonImpl2)); ICommon common = kernel[typeof(ICommon)] as ICommon; Assert.IsNotNull(common); Assert.AreEqual(typeof(CommonImpl1), common.GetType()); }
public void GetAssignableHandlers() { IKernel kernel = new DefaultKernel(); kernel.AddSubSystem(SubSystemConstants.NamingKey, new NamingPartsSubSystem()); kernel.AddComponent("common:key1=true", typeof(ICommon), typeof(CommonImpl1)); kernel.AddComponent("common:secure=true", typeof(ICommon), typeof(CommonImpl2)); IHandler[] handlers = kernel.GetAssignableHandlers(typeof(ICommon)); Assert.IsNotNull(handlers); Assert.AreEqual(2, handlers.Length); }
public void ServiceLookup() { IKernel kernel = new DefaultKernel(); kernel.AddSubSystem(SubSystemConstants.NamingKey, new NamingPartsSubSystem()); kernel.AddComponent("common:key1=true", typeof(ICommon), typeof(CommonImpl1)); kernel.AddComponent("common:secure=true", typeof(ICommon), typeof(CommonImpl2)); 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.AddComponent("1.common", typeof(ICommon), typeof(CommonImpl1)); kernel.AddComponent("11.common", typeof(ICommon), typeof(CommonImpl2)); ICommon common = kernel[typeof(ICommon)] as ICommon; Assert.IsNotNull(common); Assert.AreEqual(typeof(CommonImpl1), common.GetType()); }
public void ReturnsFirstTypeWhenNotFound() { IKernel kernel = new DefaultKernel(); kernel.AddSubSystem(SubSystemConstants.NamingKey, new KeySearchNamingSubSystem(delegate(string key) { return key.StartsWith("3"); })); 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 ReturnsCorrectType() { IKernel kernel = new DefaultKernel(); kernel.AddSubSystem(SubSystemConstants.NamingKey, new KeySearchNamingSubSystem( delegate(string key) { return key.StartsWith("castlestronghold.com"); })); kernel.AddComponent("castleproject.org.common", typeof(ICommon), typeof(CommonImpl1)); kernel.AddComponent("castlestronghold.com.common", typeof(ICommon), typeof(CommonImpl2)); ICommon common = kernel[typeof(ICommon)] as ICommon; Assert.IsNotNull(common); Assert.AreEqual(typeof(CommonImpl2), common.GetType()); }
public void MultiThreaded_RemoveResolve_Throws_When_LargeRatio_Of_ComponentsToService() { int threadCount = 1000; ArrayList list = ArrayList.Synchronized(new ArrayList()); Random rand = new Random(); ManualResetEvent waitEvent = new ManualResetEvent(false); IKernel kernel = new DefaultKernel(); kernel.AddSubSystem(SubSystemConstants.NamingKey, new KeySearchNamingSubSystem(delegate { return false; })); kernel.AddComponent("common", typeof(ICommon), typeof(CommonImpl1)); WaitCallback resolveThread = delegate { waitEvent.WaitOne(); while(threadCount > 0 && list.Count == 0) { try { ICommon common = kernel[typeof(ICommon)] as ICommon; } catch(Exception e) { list.Add(e); } } }; ThreadPool.QueueUserWorkItem(resolveThread); WaitCallback removeThread = delegate { waitEvent.WaitOne(); kernel.RemoveComponent(threadCount + ".common"); Interlocked.Decrement(ref threadCount); }; for(int i = 0; i < threadCount; i++) { kernel.AddComponent(i + ".common", typeof(ICommon), typeof(CommonImpl1)); ThreadPool.QueueUserWorkItem(removeThread); } waitEvent.Set(); while(threadCount > 0 && list.Count == 0) { Thread.Sleep(15); } if (list.Count > 0) { throw (Exception) list[0]; } }
public void MultiThreadedAddResolve() { int threadCount = 100; ArrayList list = ArrayList.Synchronized(new ArrayList()); Random rand = new Random(); ManualResetEvent waitEvent = new ManualResetEvent(false); IKernel kernel = new DefaultKernel(); kernel.AddSubSystem(SubSystemConstants.NamingKey, new KeySearchNamingSubSystem()); kernel.AddComponent("common", typeof(ICommon), typeof(CommonImpl1)); WaitCallback resolveThread = delegate { waitEvent.WaitOne(); while(threadCount > 0 && list.Count == 0) { try { ICommon common = kernel[typeof(ICommon)] as ICommon; } catch(Exception e) { list.Add(e.ToString()); } } }; ThreadPool.QueueUserWorkItem(resolveThread); WaitCallback addThread = delegate { waitEvent.WaitOne(); kernel.AddComponent(rand.Next() + ".common", typeof(ICommon), typeof(CommonImpl1)); Interlocked.Decrement(ref threadCount); }; for(int i = 0; i < threadCount; i++) { ThreadPool.QueueUserWorkItem(addThread); } waitEvent.Set(); while(threadCount > 0 && list.Count == 0) { Thread.Sleep(15); } if (list.Count > 0) { Assert.Fail(list[0].ToString()); } }
public void SetUpTests() { kernel = new DefaultKernel(); kernel.AddSubSystem(SubSystemConstants.NamingKey, new NamingPartsSubSystem()); }
public void MultiThreadedAddResolve([Values(100)] int threadCount) { object locker = new object(); IList<string> list = new List<string>(); ManualResetEvent waitEvent = new ManualResetEvent(false); IKernel kernel = new DefaultKernel(); kernel.AddSubSystem(SubSystemConstants.NamingKey, new KeySearchNamingSubSystem()); kernel.AddComponent("common", typeof(ICommon), typeof(CommonImpl1)); WaitCallback resolveThread = delegate { waitEvent.WaitOne(); while(threadCount > 0 && list.Count == 0) { try { ICommon common = kernel[typeof(ICommon)] as ICommon; } catch(Exception e) { lock (locker) { list.Add(e.ToString()); } } } }; ThreadPool.QueueUserWorkItem(resolveThread); WaitCallback addThread = delegate { waitEvent.WaitOne(); kernel.AddComponent(Guid.NewGuid() + ".common", typeof(ICommon), typeof(CommonImpl1)); Interlocked.Decrement(ref threadCount); }; for(int i = 0; i < threadCount; i++) { ThreadPool.QueueUserWorkItem(addThread); } waitEvent.Set(); while(threadCount > 0 && list.Count == 0) { Thread.Sleep(15); } if (list.Count > 0) { Assert.Fail(list[0].ToString()); } }
public void ComponentUnregistersProperly() { IKernel kernel = new DefaultKernel(); kernel.AddSubSystem(SubSystemConstants.NamingKey, new KeySearchNamingSubSystem(delegate(string key) { return key.StartsWith("2"); })); kernel.AddComponent("1.common", typeof(ICommon), typeof(CommonImpl1)); kernel.AddComponent("2.common", typeof(ICommon), typeof(CommonImpl2)); ICommon common = kernel[typeof(ICommon)] as ICommon; Assert.IsNotNull(common); Assert.AreEqual(typeof(CommonImpl2), common.GetType()); kernel.RemoveComponent("2.common"); common = kernel[typeof(ICommon)] as ICommon; Assert.IsNotNull(common); Assert.AreEqual(typeof(CommonImpl1), common.GetType()); kernel.RemoveComponent("1.common"); Assert.AreEqual(0, kernel.GetHandlers(typeof(ICommon)).Length); }
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 SingleComponentUnregistersProperly() { 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")); ICommon common = kernel[typeof(ICommon)] as ICommon; Assert.IsNotNull(common); Assert.AreEqual(typeof(CommonImpl1), common.GetType()); kernel.RemoveComponent("1.common"); Assert.IsFalse(kernel.HasComponent("1.common")); Assert.IsFalse(kernel.HasComponent(typeof(CommonImpl1))); common = kernel[typeof(ICommon)] as ICommon; }