示例#1
0
        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);
        }
示例#2
0
        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);
        }