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()); }
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); }
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>()); }
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)); }