这是我想要构建的设计:
现在我想使用像Castle这样的东西来实现IOC,这样我就可以插入我想要的任何行为。 但问题是两个实现的初始化配置参数会有所不同。例如,文件系统实现将采用目录路径,凭据等。作为配置和数据库,可能会采用连接字符串。
因此,如果我创建一个公共配置接口,假设可以在两个实现(和接口)中使用的IConfiguration,它将包含与一个或其他实现无关的属性。
那我应该如何设计呢?我的方法是否适合设计这样一个系统,如果不是,那么更好的方法或模式是什么?
答案 0 :(得分:1)
您似乎假设拥有一个配置界面意味着您只有一个配置部分。
但只有当你只有一个实现时才会这样!
换句话说,允许不同的实现具有自己的特定配置部分。
答案 1 :(得分:1)
特定于实现的配置在具体类的构造函数中,并且不是接口的一部分:
public class FileStorage : IStorage
{
private readonly DirectoryInfo directory;
private readonly Credentials credentials;
public FileStorage(DirectoryInfo directory, Credentials credentials)
{
this.directory = directory;
this.credentials = credentials;
}
// implement Save, Retrieve, etc. methods here...
}
public class SqlStorage : IStorage
{
private readonly string connectionString;
public SqlStorage(string connectionString)
{
this.connectionString = connectionString;
}
// implement Save, Retrieve, etc. methods here...
}