public void MultipleNestedDoubleParameter() { ServiceContainer services = new ServiceContainer(); services.AddScoped <INestParentService, NestParentService>(); services.AddScoped <ISingleService, SingleService>(); services.AddScoped <IParentService, ParentService>(); services.AddScoped <IFirstChildService, FirstChildService>(); services.AddScoped <ISecondChildService, SecondChildService>(); IContainerScope scope = services.CreateScope(); INestParentService nest = services.Get <INestParentService>(scope); nest.Foo = "nest"; nest.Parent.Foo = "parent"; nest.Parent.First.Foo = "first"; nest.Parent.Second.Foo = "second"; nest.Single.Foo = "single"; INestParentService n1 = services.Get <INestParentService>(scope); Assert.Equal(nest.Foo, n1.Foo); Assert.Equal(nest.Single.Foo, n1.Single.Foo); Assert.Equal(nest.Parent.Foo, n1.Parent.Foo); Assert.Equal(nest.Parent.First.Foo, n1.Parent.First.Foo); Assert.Equal(nest.Parent.Second.Foo, n1.Parent.Second.Foo); IParentService parent = services.Get <IParentService>(scope); Assert.Equal(nest.Parent.Foo, parent.Foo); Assert.Equal(nest.Parent.First.Foo, parent.First.Foo); Assert.Equal(nest.Parent.Second.Foo, parent.Second.Foo); ISingleService single = services.Get <ISingleService>(scope); Assert.Equal(nest.Single.Foo, single.Foo); IFirstChildService first = services.Get <IFirstChildService>(scope); Assert.Equal(nest.Parent.First.Foo, first.Foo); ISecondChildService second = services.Get <ISecondChildService>(scope); Assert.Equal(nest.Parent.Second.Foo, second.Foo); //scopeless should throw error Assert.Throws <ScopeException>(() => services.Get <INestParentService>()); //another scope should not equal IContainerScope scope2 = services.CreateScope(); INestParentService n3 = services.Get <INestParentService>(scope2); Assert.NotEqual(nest.Foo, n3.Foo); Assert.NotEqual(nest.Single.Foo, n3.Single.Foo); Assert.NotEqual(nest.Parent.Foo, n3.Parent.Foo); Assert.NotEqual(nest.Parent.First.Foo, n3.Parent.First.Foo); Assert.NotEqual(nest.Parent.Second.Foo, n3.Parent.Second.Foo); }
public async Task MultipleNestedDoubleParameter() { ServiceContainer services = new ServiceContainer(); services.AddSingleton <INestParentService, NestParentService>(); services.AddSingleton <ISingleService, SingleService>(); services.AddSingleton <IParentService, ParentService>(); services.AddSingleton <IFirstChildService, FirstChildService>(); services.AddSingleton <ISecondChildService, SecondChildService>(); INestParentService nest = await services.Get <INestParentService>(); nest.Foo = "nest"; nest.Parent.Foo = "parent"; nest.Parent.First.Foo = "first"; nest.Parent.Second.Foo = "second"; nest.Single.Foo = "single"; INestParentService n1 = await services.Get <INestParentService>(); Assert.Equal(nest.Foo, n1.Foo); Assert.Equal(nest.Single.Foo, n1.Single.Foo); Assert.Equal(nest.Parent.Foo, n1.Parent.Foo); Assert.Equal(nest.Parent.First.Foo, n1.Parent.First.Foo); Assert.Equal(nest.Parent.Second.Foo, n1.Parent.Second.Foo); IParentService parent = await services.Get <IParentService>(); Assert.Equal(nest.Parent.Foo, parent.Foo); Assert.Equal(nest.Parent.First.Foo, parent.First.Foo); Assert.Equal(nest.Parent.Second.Foo, parent.Second.Foo); ISingleService single = await services.Get <ISingleService>(); Assert.Equal(nest.Single.Foo, single.Foo); IFirstChildService first = await services.Get <IFirstChildService>(); Assert.Equal(nest.Parent.First.Foo, first.Foo); ISecondChildService second = await services.Get <ISecondChildService>(); Assert.Equal(nest.Parent.Second.Foo, second.Foo); IContainerScope scope = services.CreateScope(); INestParentService n2 = await services.Get <INestParentService>(scope); Assert.Equal(nest.Foo, n2.Foo); Assert.Equal(nest.Single.Foo, n2.Single.Foo); Assert.Equal(nest.Parent.Foo, n2.Parent.Foo); Assert.Equal(nest.Parent.First.Foo, n2.Parent.First.Foo); Assert.Equal(nest.Parent.Second.Foo, n2.Parent.Second.Foo); }
public void MultipleNestedDoubleParameter() { ServiceContainer services = new ServiceContainer(); services.AddTransient <INestParentService, NestParentService>(); services.AddTransient <ISingleService, SingleService>(); services.AddTransient <IParentService, ParentService>(); services.AddTransient <IFirstChildService, FirstChildService>(); services.AddTransient <ISecondChildService, SecondChildService>(); INestParentService nest = services.Get <INestParentService>(); nest.Foo = "nest"; nest.Parent.Foo = "parent"; nest.Parent.First.Foo = "first"; nest.Parent.Second.Foo = "second"; nest.Single.Foo = "single"; INestParentService n1 = services.Get <INestParentService>(); Assert.NotEqual(nest.Foo, n1.Foo); Assert.NotEqual(nest.Single.Foo, n1.Single.Foo); Assert.NotEqual(nest.Parent.Foo, n1.Parent.Foo); Assert.NotEqual(nest.Parent.First.Foo, n1.Parent.First.Foo); Assert.NotEqual(nest.Parent.Second.Foo, n1.Parent.Second.Foo); IParentService parent = services.Get <IParentService>(); Assert.NotEqual(nest.Parent.Foo, parent.Foo); Assert.NotEqual(nest.Parent.First.Foo, parent.First.Foo); Assert.NotEqual(nest.Parent.Second.Foo, parent.Second.Foo); ISingleService single = services.Get <ISingleService>(); Assert.NotEqual(nest.Single.Foo, single.Foo); IFirstChildService first = services.Get <IFirstChildService>(); Assert.NotEqual(nest.Parent.First.Foo, first.Foo); ISecondChildService second = services.Get <ISecondChildService>(); Assert.NotEqual(nest.Parent.Second.Foo, second.Foo); IContainerScope scope = services.CreateScope(); INestParentService n2 = services.Get <INestParentService>(scope); Assert.NotEqual(nest.Foo, n2.Foo); Assert.NotEqual(nest.Single.Foo, n2.Single.Foo); Assert.NotEqual(nest.Parent.Foo, n2.Parent.Foo); Assert.NotEqual(nest.Parent.First.Foo, n2.Parent.First.Foo); Assert.NotEqual(nest.Parent.Second.Foo, n2.Parent.Second.Foo); n2.Foo = "nest-2"; n2.Parent.Foo = "parent-2"; n2.Parent.First.Foo = "first-2"; n2.Parent.Second.Foo = "second-2"; n2.Single.Foo = "single-2"; INestParentService n3 = services.Get <INestParentService>(scope); Assert.NotEqual(n2.Foo, n3.Foo); Assert.NotEqual(n2.Single.Foo, n3.Single.Foo); Assert.NotEqual(n2.Parent.Foo, n3.Parent.Foo); Assert.NotEqual(n2.Parent.First.Foo, n3.Parent.First.Foo); Assert.NotEqual(n2.Parent.Second.Foo, n3.Parent.Second.Foo); }