Skip to content

Resolution failure when resolving multiple dependencies with Diagnostic extension enabled #206

@delpher

Description

@delpher

Description

When using Diagnostic container extension resolving class that requires IEnumerable of dependencies registered by name failes with AccessViolationException.

Observed in Unity 5.11.1

To Reproduce

    public class ResolutionTests
    {
        [Fact]
        public void Resolve_Multiple_With_Diagnostics_Enabled()
        {
            var container = new UnityContainer();

            container.AddNewExtension<Diagnostic>();
            
            container.RegisterType<IInterface, Implementation1>("strategy1");
            container.RegisterType<IInterface, Implementation2>("strategy2");

            container.RegisterType<IConsumer, Consumer>();

            container.Resolve<IConsumer>().Consume();
        }
    }

    public interface IInterface
    {
    }

    public class Implementation2 : IInterface
    {
    }

    public class Implementation1: IInterface
    {
    }

    public interface IConsumer
    {
        void Consume();
    }

    public class Consumer : IConsumer
    {
        private readonly IEnumerable<IInterface> _interfaces;

        public Consumer(IEnumerable<IInterface> interfaces)
        {
            _interfaces = interfaces;
        }

        public void Consume()
        {
            _interfaces.ToArray();
        }
    }

Additional context

Depending on container configuration other possible exceptions can occur: NullReferenceException, StackOverflowException has also been observed.

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