2010-01-20 4 views
14

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

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

kernel.Get<ITokenHandler>(tokenName); 

но это не спасает меня хранения информации о том, что маркер обработчик может иметь дело с в 2-х местах , Есть ли способ украсить обработчик, чтобы он автоматически отображался?

ответ

11

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

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

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

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

+0

Немного поздно, чтобы вернуться сюда. То, что я действительно было, было способом разметки конкретных классов ITokenHandler, чтобы я мог определить привязки, в которых был объявлен обработчик. Я теперь пошел с вашим примером, все строки 1 привязок имеют шаблон: Bind (). >(). Именованный (tokenName); – baralong

1

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

Между http://ninject.codeplex.com/wikipage?title=Providers%20and%20the%20Activation%20Context и http://ninject.codeplex.com/wikipage?title=Contextual%20Binding вы должны уметь связывать вещи таким образом, чтобы вы могли сказать Only(When.Context...), чтобы сделать выбор работы?

+0

Только что увидел другой ответ (как было + 1 на этом). Другой ответ выглядит гораздо более явным и понятным подходом, поэтому я определенно предпочитаю его, если это возможно - мой подход является более общим подходом, когда он может быть встроен. –

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