Что такое достойный способ работы с условными подфабриками с помощью подхода DI.
Сценарий - это объект загрузчика, который вставляется в запись, зависит от настроек этой записи. Первоначально я вводил контейнер IoC на завод и использовал его для разрешения на основе соглашений об именах. Тем не менее, я бы очень хотел содержать фабрику в чистоте от контейнера.
Фабрика вводится в класс, который загружает все настройки из базы данных, а затем использует фабрику для создания набора записей. Настройки определяют, какой загрузчик будет использоваться внутри данной записи.
Редактировать: изменение кода, чтобы лучше выделить фактический вопрос.
Проблема в том, что несколько менеджеров баз данных должны поддерживаться одновременно, если бы это было не так, тогда это было бы просто. Тип менеджера базы данных определяется настройками записи, сохраненными для конкретной записи.
public class Entry : IEntry
{
private ISomething loader;
public Entry(ISomething something)
{
this.loader = something;
}
}
public class EntryFactory : IEntryFactory
{
IEntry BuildEntry(IEntrySetting setting)
{
//Use setting object to determine which database manager will be used
}
}
public class EntryManager
{
public EntryManager(IEntryFactory entryFactory)
{
var entrySettings = this.settings.Load();
foreach(var setting in entrySettings)
{
this.entries.Add(entryFactory.BuildEntry(setting));
}
}
}
Я подумывал о том, чтобы зарегистрировать субфабрики на первичном заводе и разрешить их таким образом, но я не знаю, есть ли лучший подход.