-
-
Notifications
You must be signed in to change notification settings - Fork 72
Closed
Labels
masterIssue has been merged into ‘master’Issue has been merged into ‘master’releaseRelease branchRelease branch
Milestone
Description
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’Issue has been merged into ‘master’releaseRelease branchRelease branch