2015-06-02 4 views
1

я создал функцию (словарь) для моего проекта:словарь Вводят с помощью инъекции зависимостей

private static Dictionary<string, Func<IMessageProcessor>> strategyFactories = new Dictionary<string, Func<IMessageProcessor>>() 
    { 
     { "T.2.12.0", new Func<IMessageProcessor>(() => new HVPVTParser()) }, 
     { "T.3.03.0", new Func<IMessageProcessor>(() => new PVTParser()) }, 
     { "Unknown", new Func<IMessageProcessor>(() => new UnknownParser()) } 
    }; 

В соответствии с требованием, я хочу, чтобы избавиться от нового оператора для классов (HVPVTParser, PVTParser и UnknownParser). Могу ли я улучшить функцию посредством инъекции зависимостей? Во время исследования я нашел вариант для ввода моего словаря. Я не могу понять слово «инъекция». Может ли кто-нибудь предоставить образец кода для достижения моей цели или каких-либо рекомендаций для решения проблемы.

+0

Дикое предположение: у вас нет предыдущего опыта с инъекцией зависимостей? Вам даже нужно использовать DI? Разве ленивый не был бы более подходящим и более легким для инициализации этого словаря? –

ответ

1

Обычно вы «вводите» какой-то сервис, который реализует интерфейс. В вашем случае это будет что-то вроде:

public interface IStrategyFactoryService 
{ 
    public Dictionary<string, Func<IMessageProcessor>> Factories {get;} 
} 

Вашего класс будет тогда иметь параметр конструктора (если данные необходимы для класса функционирования) или свойства (если данные полезны но не требуется).

Затем создайте классы, реализующие этот интерфейс - настоящий для «живого» приложения и поддельный для тестирования.

Смежные вопросы