示例#1
0
        public void Properties_WithSameTagsButDifferentConnectors_HaveIndependentValues()
        {
            var carrier = new object();
            var other   = new PropertyConnector();

            PropertyConnector.Default.Get <tag1>(carrier).Set(17);
            other.Get <tag1>(carrier).Set(13);
            Assert.AreEqual(17, PropertyConnector.Default.Get <tag1>(carrier).Get());
            Assert.AreEqual(13, other.Get <tag1>(carrier).Get());
        }
示例#2
0
        public void Properties_WithSameNameButDifferentConnectors_HaveIndependentValues()
        {
            var carrier = new object();
            var name    = Guid.NewGuid().ToString("N");
            var other   = new PropertyConnector();

            PropertyConnector.Default.Get(carrier, name).Set(17);
            other.Get(carrier, name).Set(13);
            Assert.AreEqual(17, PropertyConnector.Default.Get(carrier, name).Get());
            Assert.AreEqual(13, other.Get(carrier, name).Get());
        }
        public void Property_WhenConnectorIsCollected_IsCollected()
        {
            var name      = Guid.NewGuid().ToString("N");
            var connector = new PropertyConnector();
            var carrier   = new object();
            var value     = new object();
            var valueRef  = new WeakReference(value);

            connector.Get(carrier, name).Set(value);
            GC.Collect();
            GC.WaitForPendingFinalizers();
            GC.Collect();
            Assert.IsFalse(valueRef.IsAlive);
            GC.KeepAlive(carrier);
        }
        public void Properties_CrossReferencingCarriersAcrossConnectors_WhenCarriersAreCollected_AreCollected()
        {
            var        name        = Guid.NewGuid().ToString("N");
            var        other       = new PropertyConnector();
            var        carrier1    = new object();
            var        carrierRef1 = new WeakReference(carrier1);
            var        carrier2    = new object();
            var        carrierRef2 = new WeakReference(carrier1);
            Func <int> value1      = carrier2.GetHashCode;
            var        valueRef1   = new WeakReference(value1);
            Func <int> value2      = carrier1.GetHashCode;
            var        valueRef2   = new WeakReference(value2);

            PropertyConnector.Default.Get(carrier1, name).Set(value1);
            other.Get(carrier2, name).Set(value2);
            GC.Collect();
            Assert.IsFalse(carrierRef1.IsAlive);
            Assert.IsFalse(valueRef1.IsAlive);
            Assert.IsFalse(carrierRef2.IsAlive);
            Assert.IsFalse(valueRef2.IsAlive);
        }
        public void Property_ReferencingConnector_ActsAsStrongReference()
        {
            var        name         = Guid.NewGuid().ToString("N");
            var        connector    = new PropertyConnector();
            var        connectorRef = new WeakReference(connector);
            var        carrier      = new object();
            Func <int> value        = connector.GetHashCode;
            var        valueRef     = new WeakReference(value);

            connector.Get(carrier, name).Set(value);
            GC.Collect();
            GC.WaitForPendingFinalizers();
            GC.Collect();
            Assert.IsTrue(valueRef.IsAlive);
            Assert.IsTrue(connectorRef.IsAlive);
            GC.KeepAlive(carrier);

            GC.Collect();
            GC.WaitForPendingFinalizers();
            GC.Collect();
            Assert.IsFalse(valueRef.IsAlive);
            Assert.IsFalse(connectorRef.IsAlive);
        }
示例#6
0
 public static IConnectibleProperty <TValue> GetConnectedProperty <TValue, TTag>(this object carrier, bool bypassValidation)
 {
     Contract.Requires(carrier != null);
     Contract.Ensures(Contract.Result <IConnectibleProperty <TValue> >() != null);
     return(Connector.Get <TTag>(carrier, bypassValidation).Cast <TValue>());
 }
示例#7
0
 public static IConnectibleProperty <dynamic> GetConnectedProperty(this object carrier, string name, bool bypassValidation = false)
 {
     Contract.Requires(carrier != null);
     Contract.Ensures(Contract.Result <IConnectibleProperty <dynamic> >() != null);
     return(Connector.Get(carrier, name ?? Unnamed, bypassValidation));
 }