我知道如何在 c# 中制作可插入的东西。定义一个接口,Activator.CreateInstance(<class>)
等等。或者我可以有一个显式创建插入类的实例的代码路径。很多种方法。
但是,如果我想使可插入的服务是静态的怎么办(我知道我可以重构,所以它不是,但这不是问题的重点)
具体例子。我有一个提供磁盘 I/O 抽象的类(读取文件、列表目录……)。现在我想要这个抽象的不同实现,它提供来自真实 FS、数据库的文件。
根据 Olivier Jacot-Descombes 的回复,我将有一个FileSystem
像这样的课程(这是真实的)
public static class FileSystem
{
static IFSImplemenation s_imple;
static FileSystem()
{
if(<some system setting>)
// converted to singleton instead of static
s_imple = new OldFileSystem()
else
s_imple = new DbFileSystem();
}
public static byte[] ReadFile(string path)
{
return s_imple.ReadFile(path);
}
...
}
重申一下-我有大量代码不想更改,因此保持调用签名相同很重要-此解决方案实现了这一点