Skip to content

Resolving registration after creation of nested child containers #177

@lambdank

Description

@lambdank

Description

There seems to be a problem with resolving nested child containers. I tried upgrading from 3.5.1404.0 to 5.11.1 and found the following.
If I create a child container to the root container, everything behaves as I expect it to. But, when I create a nested child container, it can not resolve registrations after the nested child has been created.

To Reproduce

In 3.5.1404.0 both tests would succeed. After the upgrade, the test RegisterLevel1_ResolveChild2_Fails does not succeed.

        interface IA { }
        class A : IA {}
        [Test]
        public void RegisterLevel1_ResolveChild2_Fails()
        {
            IUnityContainer container = new UnityContainer();
            IUnityContainer child1 = container.CreateChildContainer();
            IUnityContainer child2 = child1.CreateChildContainer();
            child1.RegisterType<IA, A>();
            var resolved = child2.Resolve<IA>();
        }

        [Test]
        public void RegisterRootLevel_ResolveChild2_Success()
        {
            IUnityContainer container = new UnityContainer();
            IUnityContainer child1 = container.CreateChildContainer();
            IUnityContainer child2 = child1.CreateChildContainer();
            container.RegisterType<IA, A>();
            var resolved = child2.Resolve<IA>();
        }

The error message is the following.

Financys.Infrastructure.CompositionRootTest.RegisterLevel1_ResolveChild2_Success

Unity.ResolutionFailedException : Resolution failed with error: No public constructor is available for type Financys.Infrastructure.CompositionRootTest+IA.

For more detailed information run Unity in debug mode: new UnityContainer(ModeFlags.Diagnostic)
  ----> System.InvalidOperationException : No public constructor is available for type Financys.Infrastructure.CompositionRootTest+IA.
  ----> Unity.Exceptions.InvalidRegistrationException : Exception of type 'Unity.Exceptions.InvalidRegistrationException' was thrown.
   at Unity.UnityContainer.<>c.<.ctor>b__41_2(BuilderContext& context) in C:\projects\unity\Container\src\UnityContainer.Resolution.cs:line 363
   at Unity.UnityContainer.Unity.IUnityContainer.Resolve(Type type, String name, ResolverOverride[] overrides) in C:\projects\unity\Container\src\UnityContainer.IUnityContainer.cs:line 244
   at Unity.UnityContainerExtensions.Resolve[T](IUnityContainer container, ResolverOverride[] overrides) in C:\projects\unity\Abstractions\src\Extensions\Container\UnityContainer.cs:line 882
   at Financys.Infrastructure.CompositionRootTest.RegisterLevel1_ResolveChild2_Success() in C:\repo\advice_productcustomer\product\Standard\Advice.Kernel.Tests\Infrastructure\Container\CompositionRootTest.cs:line 75
--InvalidOperationException
   at Unity.Processors.ConstructorProcessor.<>c.<GetResolver>b__15_1(BuilderContext& c) in C:\projects\unity\Container\src\Processors\Constructor\ConstructorResolution.cs:line 52
   at Unity.Processors.MemberProcessor`2.<>c__DisplayClass8_0.<GetResolver>b__0(BuilderContext& c) in C:\projects\unity\Container\src\Processors\Abstracts\MemberProcessor.cs:line 162
   at Unity.Processors.MemberProcessor`2.<>c__DisplayClass8_0.<GetResolver>b__0(BuilderContext& c) in C:\projects\unity\Container\src\Processors\Abstracts\MemberProcessor.cs:line 162
   at Unity.Processors.MemberProcessor`2.<>c__DisplayClass8_0.<GetResolver>b__0(BuilderContext& c) in C:\projects\unity\Container\src\Processors\Abstracts\MemberProcessor.cs:line 162
   at Unity.Strategies.BuildPlanStrategy.PreBuildUp(BuilderContext& context) in C:\projects\unity\Container\src\Strategies\BuildPlanStrategy.cs:line 80
   at Unity.UnityContainer.<>c.<.ctor>b__41_2(BuilderContext& context) in C:\projects\unity\Container\src\UnityContainer.Resolution.cs:line 342
--InvalidRegistrationException

Is this expected behavior? If it is, can I somehow reproduce the old behavior?

Metadata

Metadata

Assignees

Labels

masterIssue has been merged into ‘master’releaseRelease branch

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions