Athiwat Chunlakhan Athiwat Chunlakhan - 4 months ago 26
C# Question

c# separate class for storage

I use more than one class and I need a... lets say Global storage for all the class and method.
Is it the right way to create a static class for storage?

public static class Storage
{
public static string filePath { get; set; }
}


Or is there other ways to do it?

Answer

If you really need to make your example a singleton then here is how you do it.

public class StorageSingleton
{
    private static readonly StorageSingleton instance;

    static StorageSingleton() { 
         instance = new Singleton();
    }
    // Mark constructor as private as no one can create it but itself.
    private StorageSingleton() 
    { 
        // For constructing
    }

    // The only way to access the created instance.
    public static StorageSingleton Instance
    {
        get 
        {
            return instance;
        }
    }        

    // Note that this will be null when the instance if not set to
    // something in the constructor.
    public string FilePath { get; set; }
}

The way to call and set the singleton is the following:

// Is this is the first time you call "Instance" then it will create itself
var storage = StorageSingleton.Instance;

if (storage.FilePath == null)
{
    storage.FilePath = "myfile.txt";
}

Alternatively you can add into the constructor the following to avoid null reference exception:

// Mark constructor as private as no one can create it but itself.
private StorageSingleton() 
{ 
    FilePath = string.Empty; 
}

Word of warning; making anything global or singleton will break your code in the long run. Later on you really should be checking out the repository pattern.