没有看到一些代码很难说,但是您可能想研究实现存储库模式。Repository 实现将负责检索工厂随后用于构建其对象的数据。您可以将存储库接口注入您的工厂:
public class ModelParameterFactory : IModelParameterFactory
{
private readonly IModelParameterRepository Repository;
public ModelParameterFactory(IModelParameterRepository repository)
{
Repository = repository;
}
...interface methods use the injected repository...
}
然后你会说一个 DatabaseModelParameterRepository 和一个 FileModelParameterRepository。但我猜你也有关于你需要注入哪些的逻辑,所以需要另一个工厂:
public class ModelParameterRepositoryFactory : IModelParameterRepositoryFactory
{
public ModelParameterRepositoryFactory(...inputs needed to determine which repository to use...)
{
...assign...
}
...determine which repository is required and return it...
}
此时,将 IModelParameterRepositoryFactory 注入 ModelParameterFactory 可能比注入 IModelParameterRepository 更有意义。
public class ModelParameterFactory : IModelParameterFactory
{
private readonly IModelParameterRepositoryFactory RepositoryFactory;
public ModelParameterFactory(IModelParameterRepositoryFactory repositoryFactory)
{
RepositoryFactory = repositoryFactory;
}
...interface methods get repository from the factory...
}
无论您是否使用 DI 容器,关于使用哪个存储库和使用哪个工厂的所有逻辑现在都被移到相关的工厂实现中,而不是调用代码或 DI 配置。
虽然不是非常复杂,但这种设计确实让我停下来想知道您的 ModelParameterFactory 和 ModelParameters 是否过于通用。您可能会从将它们分成单独的、更具体的类中受益。结果将是一个更简单、更有表现力的设计。但是,如果不是这种情况,上述内容应该对您有用。