An Abstraction Layer for Temporary Data in .NET and Silverlight
Up until now, I’ve dealt with temporary data in my .NET applications using local files and FileInfo instances. This worked just fine – until I needed a solution that works under both .NET and Silverlight.
The problem: In Silverlight, you can’t just create a temporary file on the file system for security reasons. Instead, there’s the concept of isolated storage that provides you with the means to store data in files and directories. The API is very similar to working with the local file system, but it doesn’t use the FileInfo class. As a result, I needed to get rid of the (proprietary) concept of FileInfo in my temporary file handling and came up with a simple yet generic solution.
Here’s a sample usage of the API. This code transparently creates temporary storage, and works in both .NET and Silverlight:
private void Foo(ITempStreamFactory factory) { using (Stream stream = factory.CreateTempStream()) { //write to the stream, read from it } //once we get outside the "using" block, temporary data has been discarded }
The snippet above relies on a factory of type ITempStreamFactory that returns a simple Stream instance. I do not need to know anything about this returned stream – it’s the factory’s responsibility to return a Stream instance that will clean up after itself once it is being disposed.