У меня есть класс
PrototypeCollector, синглтон. он нужен для коллекционирования классов, которые хотят пассивно создавать свои экземпляры извне. Сейчас поясню, для чего это нужно
class PrototypeCollector
{
//INTERFACE
List<dynamic> prototypes = new List<dynamic>();
int commonPercentage = 0;
public void AddPrototype(Type t,int p)
{
prototypes.Add(new
{
type = t,
percentage = p
});
commonPercentage = 0;
prototypes.ForEach((pr) => commonPercentage += pr.percentage);
Console.WriteLine("Common percentage: {0}", commonPercentage);
}
public void PrintDiagram()
{
Console.WriteLine("Report about added classes:");
prototypes.ForEach((dynamic p) =>
{
Console.WriteLine("Class: {0} | Percentage: {1}",p.type.ToString(),p.percentage.ToString());
});
Console.WriteLine("==--==");
}
//==================================
public static PrototypeCollector Instance
{
get;
private set;
}
private PrototypeCollector()
{
Instance = this;
}
static PrototypeCollector()
{
new PrototypeCollector();
}
}
И есть класс Circle, который хочет без всякого лишнего кода "добавиться" в коллекцию прототипов синглтона:
class Circle
{
static Circle()
{
PrototypeCollector.Instance.AddPrototype(typeof(Circle), 20);
}
}
Нужно, чтоб этот статический конструктор вызывался в любом случае, так как явного вызова конструкторов класса Circle не будет (они будут создаваться PrototypeCollector'ом рефлексивно), соответственно, компилятор не видит явной нужды в классе Circle. Такое чувство, что он "забивает" на него. Считает лишним (ну раз его никто извне не использует и не вызывает)
Вопрос: как мне объяснить компилятору, что класс Circle нужен, и необходимо запустить его статический конструктор в любом случае, в независимости от внешнего использования?