public void It_should_resolve_complex_types_with_parameterized_ctors_honoring_sigletons_registered_across_scopes()
        {
            var outerDisposable = new Disposable();
            var innerDisposable = new Disposable();
            var otherComplex    = new OtherComplex(new Disposable());

            using (var container = CreateContainer())
            {
                using (var outerScope = container.BeginScope(c =>
                {
                    c.RegisterInstance(outerDisposable, new RegistrationOptions());
                    c.RegisterInstance(otherComplex, new RegistrationOptions());
                }))
                {
                    using (var innerScope = outerScope.BeginScope(c => c.RegisterInstance(innerDisposable, new RegistrationOptions())))
                    {
                        var complex = innerScope.Resolve <Complex>();
                        Assert.That(complex, Is.Not.Null);
                        Assert.That(complex.Disposable, Is.SameAs(innerDisposable));
                        Assert.That(complex.OtherComplex, Is.SameAs(otherComplex));
                    }
                }
            }
        }
 public Complex(Disposable disposable, OtherComplex otherComplex, Struct value)
 {
     Disposable   = disposable;
     OtherComplex = otherComplex;
     Value        = value;
 }