Pergunta

Eu tenho um método de fábrica dentro de um analisador. Essencialmente, enquanto carrego um token, procuro o manipulador para esse token ou caio no manipulador padrão. Eu implementei isso como um switch e como um Dictionary<string,Type> Mas ambas as abordagens exigem que eu armazene o mapeamento em outro lugar além da classe Handler.

Estamos usando o Ninject para o COI e, por isso, percebi que também posso fazer isso usando

kernel.Get<ITokenHandler>(tokenName); 

Mas isso não me salva armazenando as informações sobre o que o token o manipulador pode lidar em 2 locais. Existe uma maneira de decorar o manipulador para que isso seja mapeado automaticamente?

Foi útil?

Solução

Se eu seguir sua pergunta corretamente, parece que você deseja recuperar uma ligação nomeada. Você não mencionou qual versão do Ninject você está usando, mas com base no seu snippet de código, acho que você está usando o Ninject 2.0. Se for esse o caso, eu acho que isso seria suficiente para sua ligação em seu módulo:

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

Você liga tantos tipos de concreto à mesma interface e os diferencia pelo nome e depois os recupera usando a sintaxe precisa que você especificou em sua pergunta.

Se estou perdendo algo chave, me avise.

Outras dicas

Uma técnica que usei é Bind Coisas de tal maneira que você pode exigir entregar um parâmetro (no contexto) no ponto em que deseja que alguém selecione algo.

Entre http://ninject.codeplex.com/wikipage?title=providers%20and%20the%20Activation%20Context e http://ninject.codeplex.com/wikipage?title=contextual%20Binding Você deve ser capaz de vincular as coisas de tal maneira que você pode dizer Only(When.Context...) Para fazer a seleção funcionar?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top