很難說沒有看到一些代碼,但你可能想要考慮實施一個存儲庫模式。 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是否過於通用。你可以從嘲笑他們到單獨的,更具體的課堂中受益。結果將是一個更簡單,更具表現力的設計。但是,如果情況並非如此,以上應該適用於您。