public void TransactionAspect_ShouldSpecializeTheTransactionManager() { var mockModule = new Mock <IModule>(MockBehavior.Strict); using (IServiceContainer container = new ServiceContainer()) { container.Factory(injector => mockModule.Object, Lifetime.Scoped); IInjector injector = container.CreateInjector(); IModule module = injector.Get <IModule>(); Assert.That(module, Is.InstanceOf <TransactionManager <IModule> >()); } }
public void OwnedServiceInstantiationStrategy_ShouldUseTheExistingInjector() { using (IServiceContainer container = new ServiceContainer()) { container.Service <IService, Service>(Lifetime.Transient); IInjector injector = container.CreateInjector(); injector.Get <IService>(); AbstractServiceEntry entry = injector.UnderlyingContainer.Get <IService>(); Assert.That(entry.Instances.Single().RelatedInjector, Is.EqualTo(injector)); Assert.That(entry.Instances.Single().RelatedInjector.UnderlyingContainer, Is.EqualTo(entry.Owner)); } }
public void NotOwnedServiceInstantiationStrategy_ShouldInstantiateWithANewInjector() { using (IServiceContainer container = new ServiceContainer()) { container.Service <IService, Service>(Lifetime.Singleton); IInjector injector = container.CreateInjector(); injector.Get <IService>(); AbstractServiceEntry entry = injector.UnderlyingContainer.Get <IService>(); Assert.That(entry.Instances.Single().RelatedInjector, Is.Not.EqualTo(injector)); Assert.That(entry.Instances.Single().RelatedInjector.UnderlyingContainer.Parent, Is.EqualTo(entry.Owner)); } }
public void NotOwnedServiceInstantiationStrategy_ShouldLock() { using (IServiceContainer container = new ServiceContainer()) { container.Factory <IService>(i => { Assert.That(Monitor.IsEntered(container.Get <IService>())); return(new Service()); }, Lifetime.Singleton); container.CreateInjector().Get <IService>(); Assert.That(container.Get <IService>().Instances, Is.Not.Null); // factory hivva volt Assert.That(Monitor.IsEntered(container.Get <IService>()), Is.False); } }
public void DotGraphTest() { using IServiceContainer container = new ServiceContainer(); container .Service <IInterface_1, Implementation_1>(Lifetime.Transient) .Service <IInterface_2, Implementation_2>(Lifetime.Singleton) .Service <IInterface_3, Implementation_3>(Lifetime.Transient) .Service <IInterface_4, Implementation_4>(Lifetime.Scoped); using IInjector injector = container.CreateInjector(); string dotGraph = injector.GetDependencyGraph <IInterface_4>(), id1 = ContainsNode("<<u>Solti.Utils.DI.Injector.Graph.Tests.GraphTests.IInterface_4</u><br/><br/><i>Scoped</i>>"), id2 = ContainsNode("<<u>Solti.Utils.DI.Interfaces.IInjector</u><br/><br/><i>Instance</i>>"), id3 = ContainsNode("<<u>Solti.Utils.DI.Injector.Graph.Tests.GraphTests.IInterface_2</u><br/><br/><i>Singleton</i>>"), id4 = ContainsNode("<<u>Solti.Utils.DI.Injector.Graph.Tests.GraphTests.IInterface_1</u><br/><br/><i>Transient</i>>"), id5 = ContainsNode("<<u>System.Collections.Generic.IReadOnlyDictionary{string, object}:$options</u><br/><br/><i>Instance</i>>"), id6 = ContainsNode("<<u>Solti.Utils.DI.Injector.Graph.Tests.GraphTests.IInterface_3</u><br/><br/><i>Transient</i>>"); ContainsEdge(id1, id2); ContainsEdge(id1, id3); ContainsEdge(id3, id4); ContainsEdge(id4, id5); ContainsEdge(id1, id6); ContainsEdge(id6, id5); ContainsEdge(id6, id4); ContainsEdge(id6, id3); string ContainsNode(string str) { str = Regex.Replace(str, "\\.|\\/|\\$", match => $"\\{match.Value}"); Match match = Regex.Match(dotGraph, $" (?<id>N_[0-9A-F]{{8}}) \\[shape=box,margin=\\.1,label={str}\\];", RegexOptions.Multiline); Assert.That(match.Captures, Has.Count.EqualTo(1)); return(match.Groups["id"].Value); } void ContainsEdge(string id1, string id2) { Assert.That(Regex.Match(dotGraph, $"{id1} -> {id2}", RegexOptions.Multiline).Captures, Has.Count.EqualTo(1)); } }
public void ComplexTest() { IServiceReference[] references; using (IServiceContainer container = new ServiceContainer()) { container .Service <IInterface_1, Implementation_1>(Lifetime.Transient) .Service <IInterface_2, Implementation_2>(Lifetime.Singleton) .Service <IInterface_3, Implementation_3>(Lifetime.Transient) .Service <IInterface_4, Implementation_4>(Lifetime.Scoped); references = Validate(container.CreateInjector()); } Assert.That(references.All(reference => reference.RefCount == 0)); }