internal static void Construct <TDstContainer, TSrcContainer>(
     ref TDstContainer dstContainer,
     ref TSrcContainer srcContainer,
     VisitResult result,
     PropertyContainerConstructOptions options = default)
 {
     if (RuntimeTypeInfoCache <TDstContainer> .IsAbstractOrInterface() || typeof(TDstContainer) != dstContainer.GetType())
     {
         var propertyBag = PropertyBagResolver.Resolve(dstContainer.GetType());
         var action      = new ConstructAbstractType <TSrcContainer>
         {
             Options           = options,
             Result            = result,
             SrcContainer      = srcContainer,
             DstContainerBoxed = dstContainer
         };
         propertyBag.Cast(ref action);
         dstContainer = (TDstContainer)action.DstContainerBoxed;
     }
     else
     {
         var visitor = new TypeConstructionVisitor <TDstContainer>(dstContainer, result, options);
         Visit(ref srcContainer, ref visitor);
         dstContainer = visitor.Target;
     }
 }
            public void Invoke <TDstContainer>()
            {
                var visitor = new TypeConstructionVisitor <TDstContainer>((TDstContainer)DstContainerBoxed, Result, Options);

                Visit(ref SrcContainer, ref visitor);
                DstContainerBoxed = visitor.Target;
            }