public override void ImplementDeclaration(DescriptorBase container, PropertyInfo declSite)
        {
            ComponentDescriptor cd = container as ComponentDescriptor;
            if (cd == null)
                throw new ArgumentException("Cannot implement property " + declSite.Name + " as port because it is not declared inside a component!");

            Channel boundChannel = (Channel)declSite.GetValue(cd.Instance, new object[0]);

            // Ignore unbound ports
            if (boundChannel == null)
            {
                AttributeInjector.InjectOnce(
                    declSite.GetGetMethod(true), cd.Instance, new AssumeNotCalled());
                return;
            }

            if (boundChannel is SignalBase)
            {
                SignalBase boundSignal = (SignalBase)boundChannel;
                SignalDescriptor boundSignalDesc = boundSignal.Descriptor;
                TypeDescriptor elType = boundSignalDesc.ElementType;
                Descriptor = new PortDescriptor(
                    declSite,
                    boundSignalDesc,
                    elType,
                    Direction);
                CreateChildPDs(Descriptor, boundSignalDesc);
                container.AddChild(Descriptor, Descriptor.DeclarationSite.Name);
                IPackageOrComponentDescriptor pcd = container as IPackageOrComponentDescriptor;
                if (pcd != null && elType.Package != null)
                    pcd.AddDependency(elType.Package);

                IPortDescriptor port = cd.FindPort(declSite.Name);

                // Accesses to port-like properties are statically evaluated
                AttributeInjector.InjectOnce(
                    declSite.GetGetMethod(true),
                    cd.Instance,
                    new StaticEvaluation(x => new SignalRef(port, SignalRef.EReferencedProperty.Instance)));
            }
            else
            {
                throw new NotImplementedException("Non-signal ports are not yet supported");
            }
        }