The .Net BCL currently only contains a non-generic class for this functionality, so I wrote a simple generic version...
namespace System { public class WeakReference<T> : WeakReference { public new T Object { get { return (T)base.Target; } set { base.Target = value; } } public WeakReference(T target) : base(target) { } public WeakReference(T target, bool trackResurrection) : base(target, trackResurrection) { } protected WeakReference(SerializationInfo info, StreamingContext context) : base(info, context) { } } }
And here's how you can use it...
public class Dog : IDisposable { public string Name { get; private set; } public Dog(string name) { Name = name; } // IDisposable routines left out for brevity } public class Consumer { public void DoSomething() { using (var myDog = new Dog("Dioji")) { var weakReference = new WeakReference<Dog>(myDog); Console.WriteLine("My dog is called '{0}'.", weakReference.Object.Name); } } }
I'll demonstrate why this can be really useful in my next post on the "Enhancing the Aggregate Pattern in Domain Driven Design with Weak References".
No comments:
Post a Comment