void StObjConstruct(IAbstractionBOnLevel2 oB)
        {
            Assert.That(ConstructCount, Is.EqualTo(4), "ObjectA, ObjectALevel1ObjectALevel2 and ObjectALevel3 construct have been called.");
            Assert.That(oB.ConstructCount, Is.GreaterThanOrEqualTo(3), "ObjectB, ObjectBLevel1 and ObjectBLevel2 construct have been called.");

            SimpleObjectsTrace.LogMethod(GetType().GetMethod("StObjConstruct", BindingFlags.Instance | BindingFlags.NonPublic));
            oB.MethofOfBOnLevel2();

            ConstructCount = ConstructCount + 1;
        }
        void StObjConstruct([Container] PackageForABLevel1 package, IAbstractionALevel3 a3)
        {
            Assert.That(ConstructCount, Is.EqualTo(2), "ObjectB, ObjectBLevel1 construct have been called.");
            Assert.That(a3.ConstructCount, Is.GreaterThanOrEqualTo(4), "ObjectA, ObjectALevel1, ObjectALevel2 and ObjectALevel3.StObjConstruct have been called.");

            SimpleObjectsTrace.LogMethod(GetType().GetMethod("StObjConstruct", BindingFlags.Instance | BindingFlags.NonPublic));
            a3.MethofOfALevel3();
            _a3 = a3;

            ConstructCount = ConstructCount + 1;
        }
 public virtual void MethofOfBOnLevel2()
 {
     SimpleObjectsTrace.LogMethod(GetType().GetMethod("MethofOfBOnLevel2", BindingFlags.Instance | BindingFlags.Public));
 }
 public override void MethofOfALevel3()
 {
     SimpleObjectsTrace.LogMethod(GetType().GetMethod("MethofOfALevel3", BindingFlags.Instance | BindingFlags.Public));
 }