Мой проект уже содержит фабрику некоторых обработчиков (код очень упрощен):
class HandlersFactory
{
private static readonly Dictionary<string, IHandler> registeredHandlers =
new Dictionary<string, IHandler>
{
{ "First", new FirstHandler() },
{ "Second", new SecondHandler() },
{ "Third", new ThirdHandler() },
};
public bool IsRegisteredHandler(string name)
{
return registeredHandlers.ContainsKey(name);
}
public IHandler GetHandler(string name)
{
if (!IsRegisteredHandler(name))
return null;
return registeredHandlers[name];
}
}
Список обработчиков жестко запрограммирован.Фабрика находится в основной сборке, но приложение может быть расширено во время выполнения за счет дополнительных сборок (основное приложение ищет их и загружает при запуске).Дополнительные сборки подгоняют приложение.
Должна быть возможность «заменить» некоторые обработчики из основной сборки на новые (предоставьте другую логику).Так, например, фабрика вернет CustomSecondHandler
с именем «Second» вместо SecondHandler
при загрузке дополнительной сборки.Я могу переписать фабрику, но изменения не должны влиять на код, который ее уже использует.
Я думал о переносе инициализации словаря в некоторый метод RegisterHandlers
, который можно переопределить в пользовательской фабрике.И добавить внедрение зависимостей фабрики, чтобы дополнительная сборка обеспечивала собственную реализацию фабрики, полученную из существующей.А если дополнительная сборка не загружена, то используется фабрика по умолчанию.Но я чувствую, что что-то не так с этим подходом.
Пожалуйста, предложите свои идеи.Мне нужно чистое решение с минимальным написанием кода для предоставления пользовательских обработчиков, которые заменят существующие.
Спасибо.