2010-01-20 15 views
14

Tengo un método de fábrica dentro de un analizador. Básicamente, cuando cargo un token, busco el token de ese token o lo paso al manejador predeterminado. Lo he implementado como switch y como Dictionary<string,Type>, pero ambos enfoques requieren que almacene el mapeo en otro lugar que no sea la clase de controlador.Uso de Ninject IOC para reemplazar una fábrica

Estamos utilizando Ninject para la COI y por eso me he dado cuenta de que también podemos hacerlo utilizando

kernel.Get<ITokenHandler>(tokenName); 

pero eso no me hace ahorrar almacenar la información sobre qué contadores al controlador puede hacer frente en 2 lugares . ¿Hay alguna manera de decorar el controlador para que se mapee automáticamente?

Respuesta

11

Si sigo su pregunta correctamente, parece que desea recuperar un enlace con nombre. No mencionaste qué versión de Ninject estás usando, pero según tu fragmento de código, supongo que estás usando Ninject 2.0. Si ese es el caso, entonces yo creo que esto sería suficiente para su unión en el módulo:

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

Enlaza tantos tipos concretos de la misma interfaz y diferenciarlos por su nombre, y luego recuperarlos utilizando la sintaxis precisa que especificado en tu pregunta

Si me falta algo clave, házmelo saber.

+0

Un poco tarde para volver aquí. Lo que realmente buscaba era una forma de marcar las clases concretas de ITokenHandler para poder definir los enlaces donde se declaraba el controlador. He ido con tu ejemplo: todos los compás 1 de los enlaces son del patrón: Enlazar (). A >(). Nombre (tokenName); – baralong

1

Una técnica que he usado es Bind cosas de tal manera que puede requerir la entrega de un parámetro (en el contexto) en el punto donde desea que alguien seleccione algo.

Entre http://ninject.codeplex.com/wikipage?title=Providers%20and%20the%20Activation%20Context y http://ninject.codeplex.com/wikipage?title=Contextual%20Binding debería ser capaz de vincular las cosas de tal manera que pueda decir Only(When.Context...) para que la selección funcione?

+0

Solo acaba de ver la otra respuesta (como se hizo +1 en esto). La otra respuesta parece ser un enfoque mucho más explícito y claro, así que definitivamente lo preferiría si fuera posible; mi enfoque es un enfoque más general para cuando no sea posible construirlo de la manera que sea posible. –

Cuestiones relacionadas