Использование статического класса означает использование синглтона. Синглтоны побеждают цель отслеживания эффективных зависимостей ваших классов.
В любом случае, вы можете решить проблему путем рефакторинга кода и использования фабрики:
В этом случае просто отбросьте ключевое слово static
и позвольте классу быть наследуемым (вы должны добавить соответствующие ключевые слова virtual
, чтобы обеспечить правильное наследование):
public class BaseModule
{
public string UsedSource {get; set;}
public Write(string text)
{
OtherStaticClass.Log(UsedSource, text);
}
}
Затем добавьте дополнительный класс, который содержит ссылку (я дал бесполезные имена, сфокусируйтесь на цели):
public static class MySingleton
{
public static BaseModule _Module;
public static BaseModule Module
{
get
{
return _Module;
}
}
public static void ChangeImplementation (BaseModule module)
{
// do your checks here
_Module = module;
}
}
Таким образом, вы можете достичь того, что вы просите.
Как видите, у этого кода есть несколько проблем, среди которых важно отметить, что этот код имеет глобальные побочные эффекты и не поточно-ориентированный .
Лучшим подходом является полное удаление синглтона и передача класса BaseModule
(который может быть унаследован) в качестве аргумента методов / конструкторов, когда это необходимо.