I’m trying to creating a Singleton class like below where MyRepository lies in separate DAL project. It’s causing me a circular reference problem because GetMySingleTon() method returns MySingleTon class and needs its access. Same way I need MyRepository access in constructor of MySingleTon class.
public class MySingleTon
{
static MySingleTon()
{
if (Instance == null)
{
MyRepository rep = new MyRepository();
Instance = rep.GetMySingleTon();
}
}
public static MySingleTon Instance { get; private set; }
public string prop1 { get; set; }
public string prop2 { get; set; }
}
UPDATE: I was doing it very wrongly.
I think didn’t needed any singleton. Now I’ve created a class with static properties in a third project and I’m setting it once and accessing it everywhere. And it has solved my problem for now.
Thanks everyone for your answers.
The repository should not return a singleton object, a repository is used to access data and not returning singleton objects. Your repository could by itself be a singleton, but I don’t recommend it, and I don’t recommend using a singleton for the class using the repository either. In the code you have it seems like the repository needs to be aware of the “business layer” which is all messed up, the relationships should go only one way. I would re-write it as:
I don’t recommend my solution, but it should solve you problem. What I do recommend is looking into dependency injection and inversion of control since your design seems sort of wrong. Have a look at NInject.
EDIT: One other thing, why does your singleton have several properties that are public? A singleton shouldn’t expose properties it should only expose functions, and should mainly be used when you have a utility class like
Mathor a true singleton like a logger.