У меня есть интерфейс с именем IHarvester.
Существует 3 реализации этого интерфейса, каждая в своем собственном пространстве имен:
- Google
- Yahoo
- Bing
HarvesterManager использует данный комбайн. Он знает интерфейс и все 3 реализации.
Я хочу, чтобы какой-нибудь классный пользователь сказал, какой харвестер он хочет использовать. И в коде выберите эту реализацию, без реализации переключателя.
Может ли рефлексия спасти мой день?
Вот биты кода:
// repeat for each harvester
namespace Harvester.Google
{
public abstract class Fetcher : BaseHarvester, IInfoHarvester {...}
}
public enum HarvestingSource
{
Google,
Yahoo,
Bing,
}
class HarvesterManager {
public HarvestingSource PreferedSource {get;set;}
public HarvestSomthing()
{
switch (PreferedSource) .... // awful...
}
}
Спасибо.
Я дам свои 2 цента, почему я хочу это изменить. Несколько человек пишут комбайны, я хочу, чтобы они сосредоточились только на создании большего количества комбайнов, без необходимости обновлять перечисление или, в худшем случае, обновлять только перечисление.