Используя МОК Ninject для замены фабрики

У меня есть метод фабрики в синтаксическом анализаторе. По существу, поскольку я загружаю маркер, я ищу обработчик для того маркера или отбрасывание до обработчика по умолчанию. Я реализовал это как a switch и как a Dictionary<string,Type> но оба подхода требуют, чтобы я сохранил отображение где-то в другом месте, чем класс обработчика.

Мы используем Ninject для МОК и таким образом, я понял, что могу также сделать это использование

kernel.Get<ITokenHandler>(tokenName); 

но это не сохраняет меня хранящий информацию на том, с каким маркером обработчик может иметь дело в 2 местах. Существует ли способ, которым я могу украсить обработчик, таким образом, это отображается автоматически?

14
задан alexandrul 19 May 2010 в 09:11
поделиться

2 ответа

Если я правильно следую вашему вопросу, звучит так, как вы хотите получить названное привязку. Вы не упомянули, какую версию Ninject вы используете, но на основе фрагмента вашего кода я предполагаю, что вы используете Ninject 2.0. Если это так, то я бы подумал, что это будет достаточно для вашего привязки в вашем модуле:

Bind<ITokenHandler>().To<YourConcreteTypeHere>().Named(tokenName);

вы связываете столько же бетонных типов к одному и тому же интерфейсу и дифференцируете их по имени, а затем извлеките их с помощью точного синтаксиса, который вы указали в ваш вопрос.

Если мне не хватает что-то ключ, дайте мне знать.

11
ответ дан 1 December 2019 в 14:44
поделиться

Одной из методики, которую я использовал в том, чтобы BING Вещи в таком случае, если вы можете потребовать вручения параметра (в контексте) в точке, где вы хотите кто-то, чтобы выбрать что-то.

между http://ninject.codeplex.com/wikipage?title=providers%20and%20The%20activation%20Context и http://ninject.codeplex.com/wikipage?title = Conturectual% 20 миллионов Вы должны быть в состоянии связать вещи таким образом, чтобы вы могли сказать только (когда.Context ...) , чтобы сделать выбор?

1
ответ дан 1 December 2019 в 14:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: