Вопрос

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

Мы используем Ninject для IOC, и я понял, что могу сделать это, используя

kernel.Get<ITokenHandler>(tokenName); 

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top